আর তে একই প্লটে দুটি গ্রাফ প্লট করুন


570

আমি একই প্লটে y1 এবং y2 প্লট করতে চাই।

x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")

তবে আমি যখন এটি এটি করি তখন তারা একই প্লটে একসাথে চক্রান্ত করা হয় না।

মতলব-এ কেউ করতে পারে hold on, তবে কেউ কীভাবে আর-তে এটি করতে হয় তা জানেন?


3
চেক আউট ?curve। ব্যবহার add=TRUE
আইসোমর্ফিজমস

আরও নির্দিষ্ট ggplot2 উত্তরের জন্য এই প্রশ্নটি দেখুন ।
অ্যাক্সিমান

উত্তর:


617

lines()বা points()বিদ্যমান গ্রাফ যোগ করবে, কিন্তু একটি নতুন উইন্ডো তৈরি করবে না। সুতরাং আপনি করতে হবে

plot(x,y1,type="l",col="red")
lines(x,y2,col="green")

10
এটি নিম্নোক্ত সাধারণ উদাহরণে কাজ করে না কেন? > প্লট (পাপ)> লাইন (কোস) as.double (y) এ ত্রুটি: 'বিল্টিন' টাইপকে 'ডাবল' টাইপের ভেক্টরকে বাধ্য করতে পারে না
ফ্রাঙ্ক

23
এটি দেখতে সহজ। প্লট (পাপ) দিয়ে, আপনি প্রকৃত ডেটার পরিবর্তে একটি ফাংশনটি পাস করছেন। প্লট () এটি সনাক্ত করবে এবং ফলস্বরূপ আপনার ক্রিয়াকলাপটি প্লট করতে প্লট। ফাংশন () ব্যবহার করবে (এটি সম্পর্কে আরও জানতে একাধিক প্রেরণের উপর পড়ুন)। যাইহোক ,lines.function () সংজ্ঞায়িত করা হয়নি, সুতরাং লাইনগুলি () ক্লাস ফাংশনের একটি প্যারামিটার দিয়ে কী করবে তা জানে না। লাইনগুলি কেবলমাত্র আপনার ডেটা এবং শ্রেণি টিএসের টাইম সিরিজ অবজেক্টগুলির সাথে ডিল করতে পারে।
সৌমেন্দ্র

27
@Frank এটা এটি পছন্দ: plot(sin); curve(cos, add=TRUE)
isomorphismes

2
এক্স আলাদা হলে কীভাবে ব্যবহার করবেন? বলুন, আমার কাছে একটি গ্রাফের জন্য x1 এবং y1 রয়েছে এবং একই গ্রাফটিতে x2 এবং y2 এর অন্য একটি গ্রাফ যুক্ত করুন। এক্স 1 এবং এক্স 2 উভয়েরই একই পরিসীমা তবে ভিন্ন মান রয়েছে।
কবিপ্রিয়া

1
: এটা ঠিক একই lines(x2,y2,...)পরিবর্তেlines(x,y2,...)
bnaul

219

আপনি parএকই গ্রাফ কিন্তু বিভিন্ন অক্ষতে প্লট এবং প্লট করতে পারেন । নীচে কিছু:

plot( x, y1, type="l", col="red" )
par(new=TRUE)
plot( x, y2, type="l", col="green" )

আপনার সম্পর্কে বিস্তারিতভাবে পড়ুন parমধ্যে R, আপনি কি সত্যিই আকর্ষণীয় গ্রাফ জেনারেট করতে সক্ষম হবে। দেখার আরেকটি বই হ'ল পল মার্লেলের আর গ্রাফিক্স।


3
আমার আর আমাকে একটি ত্রুটি দেয়: সমান ত্রুটি (ডুমুর (নতুন = সত্য)): "ডুমুর" ফাংশনটি খুঁজে
পেল না

5
আপনার পদ্ধতিটি দুটি প্লটের জন্য সঠিক স্কেল (y অক্ষ) সংরক্ষণ করে?
আলেসান্দ্রো জ্যাকসন

1
@Uvts_cvs হ্যাঁ, এটি টোটোতে মূল গ্রাফ সংরক্ষণ করে।
স্যাম

10
এটির সাথে সমস্যাটি হ'ল এটি বেশ কয়েকটি প্লটের উপাদানগুলি পুনরায় লিখবে। আমি xlab="", ylab="", ...এবং কয়েক জনকে দ্বিতীয়টিতে অন্তর্ভুক্ত করব plot
isomorphismes

118

মাল্টিলেয়ার প্লট নির্মাণের সময় ggplotপ্যাকেজটি বিবেচনা করা উচিত । ধারণাটি হ'ল মৌলিক নান্দনিকতার সাথে একটি গ্রাফিকাল অবজেক্ট তৈরি করা এবং এটি ক্রমবর্ধমান বৃদ্ধি করা।

ggplotশৈলীতে ডেটা প্যাক করা দরকার data.frame

# Data generation
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
df <- data.frame(x,y1,y2)

প্রাথমিক সমাধান:

require(ggplot2)

ggplot(df, aes(x)) +                    # basic graphical object
  geom_line(aes(y=y1), colour="red") +  # first layer
  geom_line(aes(y=y2), colour="green")  # second layer

এখানে + operatorবেসিক অবজেক্টে অতিরিক্ত স্তর যুক্ত করতে ব্যবহৃত হয়।

আপনার সাথে ggplotচক্রান্তের প্রতিটি পর্যায়ে গ্রাফিকাল অবজেক্টে অ্যাক্সেস রয়েছে। বলুন, সাধারণ ধাপে ধাপে সেটআপটি এর মতো দেখতে পাওয়া যায়:

g <- ggplot(df, aes(x))
g <- g + geom_line(aes(y=y1), colour="red")
g <- g + geom_line(aes(y=y2), colour="green")
g

gপ্লট তৈরি করে এবং আপনি এটি প্রতিটি পর্যায়ে দেখতে পারেন (ভাল, কমপক্ষে একটি স্তর তৈরির পরে)। প্লটটির আরও জাদুগুলি তৈরি বস্তু দিয়ে তৈরি করা হয়। উদাহরণস্বরূপ, আমরা অক্ষগুলির জন্য লেবেল যুক্ত করতে পারি:

g <- g + ylab("Y") + xlab("X")
g

চূড়ান্ত gদেখতে:

এখানে চিত্র বর্ণনা লিখুন

আপডেট (2013-11-08):

মন্তব্যে নির্দেশিত হিসাবে, ggplotএর দর্শন লম্বা ফর্ম্যাটে ডেটা ব্যবহার করার পরামর্শ দেয়। সংশ্লিষ্ট কোডটি দেখতে আপনি এই উত্তরটি উল্লেখ করতে পারেন ।


5
হিসাবে হেনরিক দ্বারা প্রস্তাবিত , ডাটা সত্যিই "দীর্ঘ" বিন্যাসে হওয়া উচিত, ggplotপরিচালনা এই আরো স্বাভাবিকভাবেই "ওয়াইড" ফরম্যাট আপনি ব্যবহার করে।
krlMLr

1
@ হেনরিক: না, প্রথমবারে উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ। সম্ভবত এই উত্তরের লেখক এটিকে সম্পাদনা করতে পারেন যাতে এটি ggplotদর্শনের সাথে ঠিক ফিট হয় ...
krlMLr

1
@ কেআরএলএমএলআর, আমি আমার উত্তরটি সম্পাদন করার চেষ্টা করেছি যাতে এটি আরও স্পষ্টভাবে প্রশ্নটির সমাধান করে। আরও আপডেট পরামর্শ দয়া করে নির্দ্বিধায়। চিয়ার্স।
হেনরিক

3
আমাকে ggplot (aes ()) এর উপর x সংজ্ঞা দিতে শিখিয়েছিলেন এবং তারপরে y নিজে থেকে geom _ * () তে যান। নিস!
ড্যান

41

আমি মনে করি আপনি যে উত্তরটি সন্ধান করছেন তা হ'ল:

plot(first thing to plot)
plot(second thing to plot,add=TRUE)

25
এটি কাজ করে বলে মনে হচ্ছে না, এটি একটি "add" is not a graphical parameterসতর্কতা দেয় তবে প্রথম প্লটটি কেবল দ্বিতীয় প্লটটি মুদ্রণ করে।
ওয়াল্ডির লিওনসিও


এর একটি দুর্দান্ত সুবিধা হ'ল এটি অক্ষগুলির সীমা এবং শিরোনামকে সামঞ্জস্যপূর্ণ বলে মনে হচ্ছে। পূর্ববর্তী কয়েকটি পদ্ধতিতে আর এর অক্ষের উপর দুটি সেট টিক চিহ্ন আঁকার কারণ, যদি না আপনি আরও বিকল্প উল্লেখ করার ঝামেলা না করেন। বলা বাহুল্য, অক্ষগুলিতে দুটি সেট টিক চিহ্ন থাকা খুব বিভ্রান্তিকর হতে পারে।
আরএমমারফি

1
অ্যাড প্যারামিটারটি কিছু প্লট পদ্ধতির জন্য কাজ করে তবে আর / ডিফল্টটি আর
তে নয়

2
আমি একই ত্রুটি পেয়েছি "add" is not a graphical parameter। আমার আর R version 3.2.3 (2015-12-10)। আপনি par(new=TRUE)এই প্লটের মধ্যে কমান্ড ব্যবহার করতে পারেন ।
কোয়েপাস

29

matplotফাংশনটি ব্যবহার করুন :

matplot(x, cbind(y1,y2),type="l",col=c("red","green"),lty=c(1,1))

এটি ব্যবহার করুন y1এবং যদি y2একই xপয়েন্টগুলিতে মূল্যায়ন করা হয় । এটি যেকোন বৃহত্তর ( y1বা y2) মাপসইগুলির জন্য Y- অক্ষের মাপসই করে , এখানে অন্য উত্তরগুলির থেকে ভিন্ন যা y2এটির চেয়ে বড় হয়ে গেলে ক্লিপ করবে y1(ggplot সমাধানগুলি বেশিরভাগ ক্ষেত্রে এটি ঠিক আছে)।

বিকল্পভাবে, এবং যদি দুটি লাইনের একই x- স্থানাঙ্ক না থাকে তবে প্রথম প্লটটিতে অক্ষ সীমা নির্ধারণ করুন এবং যুক্ত করুন:

x1  <- seq(-2, 2, 0.05)
x2  <- seq(-3, 3, 0.05)
y1 <- pnorm(x1)
y2 <- pnorm(x2,1,1)

plot(x1,y1,ylim=range(c(y1,y2)),xlim=range(c(x1,x2)), type="l",col="red")
lines(x2,y2,col="green")

এই প্রশ্নটি 4 বছর বয়সী অবাক হয়েছি এবং কেউই উল্লেখ করেনি matplotবা x/ylim...


25

tl; dr: আপনি curve(সাথে add=TRUE) বা ব্যবহার করতে চান lines


আমি এর সাথে একমত নই par(new=TRUE)কারণ এটি টিক-চিহ্ন এবং অক্ষের লেবেলগুলিকে ডাবল মুদ্রণ করবে। যেমন

সাইন এবং প্যারাবোলা

এর আউটপুট plot(sin); par(new=T); plot( function(x) x**2 )

উল্লম্ব অক্ষের লেবেলগুলি কীভাবে বিভ্রান্ত হয়েছে তা দেখুন! রেঞ্জগুলি পৃথক হওয়ার কারণে আপনাকে সেট করতে হবে ylim=c(lowest point between the two functions, highest point between the two functions)যা আমি আপনাকে যা দেখাতে চলেছি তার চেয়ে কম সহজ --- এবং আপনি কেবল দুটি বক্ররেখা নয়, তবে অনেকগুলি যুক্ত করতে চান তবে উপায় সহজ।


কি সবসময় আমার ষড়যন্ত্র সম্পর্কে বিভ্রান্ত মধ্যে পার্থক্য curveএবং lines(যদি আপনি এটি মনে করতে না পারেন যে এই দুটি গুরুত্বপূর্ণ পরিকল্পনার আদেশের নাম, তবে এটি গান করুন ))

এখানে মধ্যে বড় পার্থক্য curveএবং lines

curveমত একটি ফাংশন প্লট করা হবে curve(sin)linesx এবং y মূল্যবোধ, মতো প্লট পয়েন্ট: lines( x=0:10, y=sin(0:10) )

এবং এখানে একটি ছোটখাট পার্থক্য: curveচাহিদার সঙ্গে বলা হবে add=TRUE, আপনি কি করার চেষ্টা করছেন কি জন্য যখন linesইতিমধ্যে অনুমান আপনি যদি একটি বিদ্যমান প্লট করার জন্য যোগ করছি।

আইডি ও সাইন

এখানে কল করার ফলাফল plot(0:2); curve(sin)


পর্দার আড়ালে, চেক আউট methods(plot)। এবং চেক করুন body( plot.function )[[5]]। যখন আপনি plot(sin)আর ফিগারগুলি কল করেন তখন sinএটি একটি ফাংশন (y মান নয়) এবং plot.functionপদ্ধতিটি ব্যবহার করে , যা কলিং শেষ হয় curve। সুতরাং curveফাংশন হ্যান্ডেল বোঝানো টুল।


17

আপনি যদি প্লটটিকে দুটি কলামে বিভক্ত করতে চান (একে অপরের 2 টি প্লট), আপনি এটি এটি করতে পারেন:

par(mfrow=c(1,2))

plot(x)

plot(y) 

রেফারেন্স লিংক


16

@ রেডমোড দ্বারা বর্ণিত হিসাবে আপনি একই গ্রাফিকাল ডিভাইসে দুটি লাইন প্লট করতে পারেন ggplot। এই উত্তরে তথ্যগুলি একটি 'প্রশস্ত' বিন্যাসে ছিল। যাইহোক, ggplotএটি ব্যবহার করার সময় সাধারণত একটি 'দীর্ঘ' ফর্ম্যাটে ডেটা ফ্রেমে ডেটা রাখা সর্বাধিক সুবিধাজনক। তারপরে, aesথ্যাটিক্স আর্গুমেন্টে বিভিন্ন 'গ্রুপিং ভেরিয়েবল' ব্যবহার করে লাইনের বৈশিষ্ট্য যেমন লিনেটাইপ বা রঙ, গ্রুপিং ভেরিয়েবল অনুযায়ী পৃথক হবে এবং সংশ্লিষ্ট কিংবদন্তি উপস্থিত হবে।

এই ক্ষেত্রে, আমরা colourএ্যাসেথটিক্স ব্যবহার করতে পারি, যা ডেটা সেটে ভেরিয়েবলের বিভিন্ন স্তরের সাথে লাইনের বর্ণের সাথে মেলে (এখানে: y1 বনাম y2)। তবে প্রথমে আমাদের reshape2প্যাকেজ থেকে 'গলে' ফাংশনটি ব্যবহার করে প্রশস্ত থেকে দীর্ঘ বিন্যাসে ডেটা গলানো দরকার । ডেটা পুনরায় আকার দেওয়ার অন্যান্য পদ্ধতির বর্ণনা এখানে দেওয়া হয়েছে: চওড়া থেকে দীর্ঘ বিন্যাসে পুনরায় আকারের ডেটা ফ্রেম

library(ggplot2)
library(reshape2)

# original data in a 'wide' format
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
df <- data.frame(x, y1, y2)

# melt the data to a long format
df2 <- melt(data = df, id.vars = "x")

# plot, using the aesthetics argument 'colour'
ggplot(data = df2, aes(x = x, y = value, colour = variable)) + geom_line()

এখানে চিত্র বর্ণনা লিখুন


15

আপনি যদি বেস গ্রাফিক্স ব্যবহার করছেন (যেমন ল্যাটিস / গ্রিড গ্রাফিক্স নয়) তবে নতুন প্লট শুরু না করেই আপনি আপনার প্লটে অতিরিক্ত বিশদ যুক্ত করতে পয়েন্ট / লাইন / বহুভুজ ফাংশনগুলি ব্যবহার করে MATLAB এর বৈশিষ্ট্যটির নকল করতে পারেন। একাধিক বিন্যাসের ক্ষেত্রে, আপনি par(mfg=...)কোন প্লটে জিনিস যুক্ত করবেন তা চয়ন করতে আপনি ব্যবহার করতে পারেন ।



7

অ্যারেতে প্লট করা মানগুলি না রেখে সেগুলি ম্যাট্রিক্সে সঞ্চয় করুন store ডিফল্টরূপে পুরো ম্যাট্রিক্সকে একটি ডেটা সেট হিসাবে বিবেচনা করা হবে। তবে আপনি যদি প্লটে একই সংখ্যক সংশোধক যুক্ত করেন, যেমন কর্ট (), যেমন আপনার ম্যাট্রিক্সে সারি রয়েছে, R নির্ধারণ করবে যে প্রতিটি সারিটি স্বাধীনভাবে চিকিত্সা করা উচিত। উদাহরণ স্বরূপ:

x = matrix( c(21,50,80,41), nrow=2 )
y = matrix( c(1,2,1,2), nrow=2 )
plot(x, y, col("red","blue")

আপনার ডেটা সেটগুলি ভিন্ন আকারের না হলে এটি কাজ করা উচিত।


এটি দেয়: ত্রুটি যদি (as.factor) argument: যুক্তিটি যৌক্তিক হিসাবে ব্যাখ্যাযোগ্য নয়
বাউস

5

আইডোমেটিক মাতলাবকে plot(x1,y1,x2,y2)আর-তে অনুবাদ করা যায় ggplot2উদাহরণস্বরূপ:

x1 <- seq(1,10,.2)
df1 <- data.frame(x=x1,y=log(x1),type="Log")
x2 <- seq(1,10)
df2 <- data.frame(x=x2,y=cumsum(1/x2),type="Harmonic")

df <- rbind(df1,df2)

library(ggplot2)
ggplot(df)+geom_line(aes(x,y,colour=type))

এখানে চিত্র বর্ণনা লিখুন

জিপিপ্লট 2 ব্যবহার করে বিভিন্ন ধরণের এক্স-অক্ষের টিউটিং ঝাওয়ের দ্বৈত লাইন প্লটগুলি দ্বারা অনুপ্রাণিত ।


5

আপনি প্লাগলিটি প্যাকেজ ggplotly()থেকে ফাংশনটি এখানে gggplot2 উদাহরণগুলির যে কোনও একটি ইন্টারেক্টিভ প্লটে রূপান্তর করতে ব্যবহার করতে পারেন , তবে আমি মনে করি যে এই ধরণের প্লট ggplot2 ছাড়াই ভাল :

# call Plotly and enter username and key
library(plotly)
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)

plot_ly(x = x) %>%
  add_lines(y = y1, color = I("red"), name = "Red") %>%
  add_lines(y = y2, color = I("green"), name = "Green")

এখানে চিত্র বর্ণনা লিখুন


চূড়ান্তভাবে উজ্জ্বল দেখায়; এটা বিনামূল্যে ?
ডেনিস

@ এডিস, এখানে সীমাহীন ফ্রি পাবলিক প্লটিং এবং পেইড প্রাইভেট প্লটিং বা অন-প্রাইমিস বিকল্প রয়েছে। দেখুন পরিকল্পনা পৃষ্ঠা
মাতেও সানচেজ

4
প্লটলি আর প্যাকেজটি এখন 100% ফ্রি এবং ওপেন সোর্স (এমআইটি লাইসেন্সপ্রাপ্ত)। আপনি এটি কোনও প্লট অ্যাকাউন্ট হিসাবে বা ছাড়াই ব্যবহার করতে পারেন।
কারসন

4

আপনি জিজিভিস ব্যবহার করে আপনার প্লটও তৈরি করতে পারেন :

library(ggvis)

x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
df <- data.frame(x, y1, y2)

df %>%
  ggvis(~x, ~y1, stroke := 'red') %>%
  layer_paths() %>%
  layer_paths(data = df, x = ~x, y = ~y2, stroke := 'blue')

এটি নিম্নলিখিত প্লট তৈরি করবে:

এখানে চিত্র বর্ণনা লিখুন


2

ব্যবহার করে plotly( plotlyপ্রাথমিক এবং গৌণ y অক্ষ দিয়ে সমাধান যোগ করা - এটি অনুপস্থিত বলে মনে হচ্ছে):

library(plotly)     
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)

df=cbind.data.frame(x,y1,y2)

  plot_ly(df) %>%
    add_trace(x=~x,y=~y1,name = 'Line 1',type = 'scatter',mode = 'lines+markers',connectgaps = TRUE) %>%
    add_trace(x=~x,y=~y2,name = 'Line 2',type = 'scatter',mode = 'lines+markers',connectgaps = TRUE,yaxis = "y2") %>%
    layout(title = 'Title',
       xaxis = list(title = "X-axis title"),
       yaxis2 = list(side = 'right', overlaying = "y", title = 'secondary y axis', showgrid = FALSE, zeroline = FALSE))

কাজের ডেমো থেকে স্ক্রিনশট:

এখানে চিত্র বর্ণনা লিখুন


আমি কোডটি সংকলন করেছি এবং কাজ করে না, প্রথমে%>% তে ত্রুটি চিহ্নিত করেছি এবং আমি এটি মুছে ফেলেছি, তারপরে একটি ত্রুটি চিহ্নিত করেছি Error in library(plotly) : there is no package called ‘plotly’কেন?
বেল্ল্যাট্রিক্স

আপনি কি প্যাকেজ ইনস্টল করেছেন plotly? install.packages("plotly")কমান্ডটি ব্যবহার করে আপনাকে প্যাকেজ ইনস্টল করতে হবে ।
সৌরভ চৌহান

1

আমরা জাল লাইব্রেরি ব্যবহার করতে পারেন

library(lattice)
x <- seq(-2,2,0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
xyplot(y1 + y2 ~ x, ylab = "y1 and y2", type = "l", auto.key = list(points = FALSE,lines = TRUE))

নির্দিষ্ট রঙের জন্য

xyplot(y1 + y2 ~ x,ylab = "y1 and y2", type = "l", auto.key = list(points = F,lines = T), par.settings = list(superpose.line = list(col = c("red","green"))))

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.