Ggplot2 লাইন প্লটটিতে কিংবদন্তি যুক্ত করুন


143

Ggplot2-তে কিংবদন্তি সম্পর্কে আমার একটি প্রশ্ন আছে। আমি একই গ্রাফে তিনটি লাইন প্লট করতে সক্ষম হয়েছি এবং ব্যবহৃত তিনটি রঙের সাথে একটি কিংবদন্তি যুক্ত করতে চাই। এটি ব্যবহৃত কোড

library(ggplot2)    
require(RCurl)

link<-getURL("https://dl.dropbox.com/s/ds5zp9jonznpuwb/dat.txt")
datos<- read.csv(textConnection(link),header=TRUE,sep=";")
datos$fecha <- as.POSIXct(datos[,1], format="%d/%m/%Y")    

temp = ggplot(data=datos,aes(x=fecha, y=TempMax,colour="1")) + 
           geom_line(colour="red") + opts(title="TITULO") +
           ylab("Temperatura (C)") + xlab(" ") + 
           scale_y_continuous(limits = c(-10,40)) + 
           geom_line(aes(x=fecha, y=TempMedia,colour="2"),colour="green") + 
           geom_line(aes(x=fecha, y=TempMin,colour="2"),colour="blue") +
           scale_colour_manual(values=c("red","green","blue"))

temp

এবং আউটপুট

ggplot তিন লাইন

আমি ব্যবহৃত তিনটি রঙ এবং ভেরিয়েবলের নাম (টেম্প্যাক্স, টেম্পমিডিয়া এবং টেম্পমিন) সহ একটি কিংবদন্তি যুক্ত করতে চাই। আমি চেষ্টা করেছি

scale_colour_manual

তবে সঠিক উপায় খুঁজে পাচ্ছি না।

দুর্ভাগ্যক্রমে লিঙ্কযুক্ত সাইট থেকে মূল ডেটা মুছে ফেলা হয়েছে এবং পুনরুদ্ধার করা যায়নি। তবে তারা এই ফর্ম্যাটটি সহ মেটিও ডেটা ফাইল থেকে এসেছিল

"date","Tmax","Tmin","Tmed","Precip.diaria","Wmax","Wmed"
2000-07-31 00:00:00,-1.7,-1.7,-1.7,-99.9,20.4,20.4
2000-08-01 00:00:00,22.9,19,21.11,-99.9,6.3,2.83
2000-08-03 00:00:00,24.8,12.3,19.23,-99.9,6.8,3.87
2000-08-04 00:00:00,20.3,9.4,14.4,-99.9,8.3,5.29
2000-08-08 00:00:00,25.7,14.4,19.5,-99.9,7.9,3.22
2000-08-09 00:00:00,29.8,16.2,22.14,-99.9,8.5,3.27
2000-08-10 00:00:00,30,17.8,23.5,-99.9,7.7,3.61
2000-08-11 00:00:00,27.5,17,22.68,-99.9,8.8,3.85
2000-08-12 00:00:00,24,13.3,17.32,-99.9,8.4,3.49

আমি এখনও উত্সাহী ওয়েথার কিংবদন্তিগুলি প্লটের পৃথক উপাদানগুলির সাথে আবদ্ধ হতে পারে (যেমন বিভিন্ন জিওম_লাইন)।
এটিয়েন লো-ডিকারি

আপনার যদি কেবল 3 টি লাইন থাকে তবে আমি ডাইরেক্টবেলস প্যাকেজটি দেখার পরামর্শ দিই। (লিঙ্ক)
টাইলার রিঙ্কার

@ টাইলার রিঙ্কার আমি আগে এটি অন্য উদ্দেশ্যে ব্যবহার করেছিলাম তবে এখন সিগিলিস্পির উত্তর আমার পক্ষে আরও ভাল কাজ করে
প্যাসোমেট

@ এটিয়েনলও-ডিকারি আপনি পারেন তবে সাধারণভাবে কেবল যদি তারা বিভিন্ন নান্দনিকতা ব্যবহার করে। উদাহরণস্বরূপ, রঙের জন্য একটি রেখার সেটকে ম্যাপিং এবং অন্যটি লিনেটাইপটিতে ম্যাপিং। সাধারণত আপনি সেই ক্ষেত্রে প্রতিটি জিওমের আলাদা আলাদা ডেটা দিয়ে যেতে চান।
জোড়ান

উত্তর:


82

আমার সন্ধানের প্রবণতা যদি আমি একাধিক জেমের মধ্যে পৃথক রঙ নির্দিষ্ট করে দিই, তবে আমি এটি ভুল করছি। এখানে আমি কীভাবে আপনার ডেটা প্লট করব:

##Subset the necessary columns
dd_sub = datos[,c(20, 2,3,5)]
##Then rearrange your data frame
library(reshape2)
dd = melt(dd_sub, id=c("fecha"))

যা বাকি আছে তা হ'ল একটি সহজ জিপিপ্লট কমান্ড:

ggplot(dd) + geom_line(aes(x=fecha, y=value, colour=variable)) +
  scale_colour_manual(values=c("red","green","blue"))

উদাহরণ প্লট

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


87
জিম_লাইনের মতো উপাদানগুলির পৃথক সংযোজনের সাথে যুক্ত কিংবদন্তিগুলি কীভাবে যুক্ত করা যায় সে সম্পর্কে আমি এখনও আগ্রহী, যা আমি যদিও প্রশ্নের মূল উদ্দেশ্য ছিল।
এটিয়েন লো-ডিকারি

202

যেহেতু @ ইটিয়েন ডেটা গলিয়ে না ফেলে কীভাবে এটি জিজ্ঞাসা করেছিলেন (যা সাধারণভাবে পছন্দসই পদ্ধতি, তবে আমি স্বীকার করি যে এটি সম্ভব নয় এমন কিছু ক্ষেত্রে থাকতে পারে), তাই আমি নিম্নলিখিত বিকল্পটি উপস্থাপন করি।

মূল ডেটার একটি উপসেট দিয়ে শুরু করুন:

datos <-
structure(list(fecha = structure(c(1317452400, 1317538800, 1317625200, 
1317711600, 1317798000, 1317884400, 1317970800, 1318057200, 1318143600, 
1318230000, 1318316400, 1318402800, 1318489200, 1318575600, 1318662000, 
1318748400, 1318834800, 1318921200, 1319007600, 1319094000), class = c("POSIXct", 
"POSIXt"), tzone = ""), TempMax = c(26.58, 27.78, 27.9, 27.44, 
30.9, 30.44, 27.57, 25.71, 25.98, 26.84, 33.58, 30.7, 31.3, 27.18, 
26.58, 26.18, 25.19, 24.19, 27.65, 23.92), TempMedia = c(22.88, 
22.87, 22.41, 21.63, 22.43, 22.29, 21.89, 20.52, 19.71, 20.73, 
23.51, 23.13, 22.95, 21.95, 21.91, 20.72, 20.45, 19.42, 19.97, 
19.61), TempMin = c(19.34, 19.14, 18.34, 17.49, 16.75, 16.75, 
16.88, 16.82, 14.82, 16.01, 16.88, 17.55, 16.75, 17.22, 19.01, 
16.95, 17.55, 15.21, 14.22, 16.42)), .Names = c("fecha", "TempMax", 
"TempMedia", "TempMin"), row.names = c(NA, 20L), class = "data.frame")

আপনি পছন্দসই প্রভাব পেতে পারেন (এবং এটি মূল প্লটিং কোডটিও পরিষ্কার করে):

ggplot(data = datos, aes(x = fecha)) +
  geom_line(aes(y = TempMax, colour = "TempMax")) +
  geom_line(aes(y = TempMedia, colour = "TempMedia")) +
  geom_line(aes(y = TempMin, colour = "TempMin")) +
  scale_colour_manual("", 
                      breaks = c("TempMax", "TempMedia", "TempMin"),
                      values = c("red", "green", "blue")) +
  xlab(" ") +
  scale_y_continuous("Temperatura (C)", limits = c(-10,40)) + 
  labs(title="TITULO")

ধারণাটি হ'ল প্রতিটি লাইনে colourএকটি ধ্রুবক স্ট্রিংয়ে নান্দনিক ম্যাপিংয়ের মাধ্যমে একটি রঙ দেওয়া হয় । আপনি কিংবদন্তিতে প্রদর্শিত হতে চান এমন স্ট্রিংটি নির্বাচন করা সবচেয়ে সহজ। এই ক্ষেত্রে এটি yভেরিয়েবলের নামে যে একইভাবে চক্রান্ত করা হচ্ছে তা গুরুত্বপূর্ণ নয়; এটি স্ট্রিংয়ের কোনও সেট হতে পারে। এটি aesকলটির অভ্যন্তরে থাকা খুব গুরুত্বপূর্ণ ; আপনি এই "ভেরিয়েবল" এ ম্যাপিং তৈরি করছেন।

scale_colour_manualউপযুক্ত স্ট্রিংগুলিতে এই স্ট্রিংগুলি এখন ম্যাপ করতে পারে। ফলাফল হলো এখানে চিত্র বর্ণনা লিখুন

কিছু ক্ষেত্রে, স্তরগুলি এবং রঙগুলির মধ্যে ম্যাপিংটি ম্যানুয়াল স্কেলে মানগুলি নাম দিয়ে স্পষ্ট করে দেওয়া দরকার (এটি নির্দেশ করার জন্য @ ডেভআরজিপি ধন্যবাদ ):

ggplot(data = datos, aes(x = fecha)) +
  geom_line(aes(y = TempMax, colour = "TempMax")) +
  geom_line(aes(y = TempMedia, colour = "TempMedia")) +
  geom_line(aes(y = TempMin, colour = "TempMin")) +
  scale_colour_manual("", 
                      values = c("TempMedia"="green", "TempMax"="red", 
                                 "TempMin"="blue")) +
  xlab(" ") +
  scale_y_continuous("Temperatura (C)", limits = c(-10,40)) + 
  labs(title="TITULO")

(আগের মত একই চিত্র প্রদান)। নামযুক্ত মান সহ, বিরতিগুলি কিংবদন্তিতে ক্রম সেট করতে ব্যবহার করা যেতে পারে এবং মানগুলিতে কোনও ক্রম ব্যবহার করা যেতে পারে।

ggplot(data = datos, aes(x = fecha)) +
  geom_line(aes(y = TempMax, colour = "TempMax")) +
  geom_line(aes(y = TempMedia, colour = "TempMedia")) +
  geom_line(aes(y = TempMin, colour = "TempMin")) +
  scale_colour_manual("", 
                      breaks = c("TempMedia", "TempMax", "TempMin"),
                      values = c("TempMedia"="green", "TempMax"="red", 
                                 "TempMin"="blue")) +
  xlab(" ") +
  scale_y_continuous("Temperatura (C)", limits = c(-10,40)) + 
  labs(title="TITULO")


2
আমি এই সমাধানটি পছন্দ করি তবে আমার মনে হয় এর কোনও সীমাবদ্ধতা থাকতে পারে। 'ব্রেক' এবং 'মান' ভেরিয়েবলগুলির ম্যাপিংয়ের মধ্যে কি কোনও বর্ণমালা বাছাইয়ের সমস্যা রয়েছে? টেম্পএম {এ] এক্স, টেম্পএম {ই} দিয়া এবং টেম্পএম at i} n ঝরঝরেভাবে সাজান, যদিও আমি যখন এটি আমার চলক নামগুলির সাথে মানিয়ে নিই, রঙগুলি বর্ণমালার সাথে 'ব্রেক'-এর সাথে মিলছে বলে মনে হচ্ছে, ক্রম ইনপুটটিতে নয় । এটিকে প্রতিফলিত / সংশোধন করতে উপরেরগুলিকে কী স্পষ্ট করা / পরিমার্জন করা যেতে পারে?
ডেভআরজিপি

3
আমি আগে কিনেছি এমন সমস্যার সমাধান পেতে পেরেছি: কালার অর্ডারিং। scale_colour_manual("", values = c("TempMax" = "red", "TempMedia" = "green", "TempMin" = "blue"))টেমপ্যাক্স, টেম্পমিডিয়া এবং টেম্পমিন উপরের উত্তরের মতো রঙের যুক্তি হিসাবে নির্দিষ্ট করা হয়েছে এমন ফর্মটি ব্যবহার করুন ।
ডেভআরজিপি

@ ডেভআরজিপি এটি জিপিপ্লট একটি বাগ হিসাবে বিবেচনা করা যেতে পারে?
আলেসান্দ্রো জ্যাকসন

1
@ স্টেলাবিদারম্যান আপনাকে ধন্যবাদ। এটি জেনে খুশি হলাম যে এই উত্তরটি এখনও প্রায় 5 বছর (!) পরে কার্যকর later
ব্রায়ান ডিগস

1
@ ব্রায়ানডিগস আপনি কীভাবে জানতে পারবেন না যে কীভাবে একটি লাইনের বিপরীতে এই স্কেলটিকে বিন্দুতে তৈরি করবেন?
স্টেলা বিডারম্যান 18

2

আমি @ ব্রায়ান ডিগস দ্বারা প্রস্তাবিত সমাধানটি সত্যিই পছন্দ করি। যাইহোক, আমার ক্ষেত্রে, আমি লুপ প্লটগুলি একটি স্পষ্টভাবে দেওয়ার পরিবর্তে একটি লুপে তৈরি করি কারণ আমার কত প্লট থাকবে তা আমি জানি না ri আমি যখন @ ব্রায়ানের কোডটি মানিয়ে নেওয়ার চেষ্টা করেছি তখন রঙগুলি সঠিকভাবে পরিচালনা করতে আমি কিছু সমস্যার মুখোমুখি হয়েছিলাম। পরিণত হয়েছে আমার নান্দনিক ফাংশনগুলি পরিবর্তন করতে হবে। যদি কারও একই সমস্যা হয় তবে এখানে কোডটি আমার পক্ষে কাজ করেছে।

আমি @ ব্রায়ানের মতো একই ডেটা ফ্রেম ব্যবহার করেছি:

data <- structure(list(month = structure(c(1317452400, 1317538800, 1317625200, 1317711600, 
                                       1317798000, 1317884400, 1317970800, 1318057200, 
                                       1318143600, 1318230000, 1318316400, 1318402800, 
                                       1318489200, 1318575600, 1318662000, 1318748400, 
                                       1318834800, 1318921200, 1319007600, 1319094000), 
                                     class = c("POSIXct", "POSIXt"), tzone = ""),
                   TempMax = c(26.58, 27.78, 27.9, 27.44, 30.9, 30.44, 27.57, 25.71, 
                               25.98, 26.84, 33.58, 30.7, 31.3, 27.18, 26.58, 26.18, 
                               25.19, 24.19, 27.65, 23.92), 
                   TempMed = c(22.88, 22.87, 22.41, 21.63, 22.43, 22.29, 21.89, 20.52,
                                 19.71, 20.73, 23.51, 23.13, 22.95, 21.95, 21.91, 20.72, 
                                 20.45, 19.42, 19.97, 19.61), 
                   TempMin = c(19.34, 19.14, 18.34, 17.49, 16.75, 16.75, 16.88, 16.82, 
                               14.82, 16.01, 16.88, 17.55, 16.75, 17.22, 19.01, 16.95, 
                               17.55, 15.21, 14.22, 16.42)), 
              .Names = c("month", "TempMax", "TempMed", "TempMin"), 
              row.names = c(NA, 20L), class = "data.frame")  

আমার ক্ষেত্রে, আমি উত্পন্ন my.colsএবং my.namesগতিশীলভাবে করি, তবে আমি অযৌক্তিকভাবে জিনিসগুলিকে জটিল করতে চাই না তাই আমি এগুলি এখানে স্পষ্টভাবেই দেই। এই তিনটি লাইন কিংবদন্তির ক্রম এবং রঙ নির্ধারণকে সহজ করে তোলে।

my.cols <- heat.colors(3, alpha=1)
my.names <- c("TempMin", "TempMed", "TempMax")
names(my.cols) <- my.names

এবং এখানে চক্রান্ত:

p <-  ggplot(data, aes(x = month))

for (i in 1:3){
  p <- p + geom_line(aes_(y = as.name(names(data[i+1])), colour = 
colnames(data[i+1])))#as.character(my.names[i])))
}
p + scale_colour_manual("", 
                        breaks = as.character(my.names),
                        values = my.cols)
p

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


2
এই জটিলতায়, ggplotপ্রত্যাশা করে এমন দীর্ঘ ফর্মের মধ্যে কেবল আপনার ডেটা পুনরায় আকার দেওয়া সত্যিই অনেক সহজ হয়ে যায় ।
অ্যাক্সিম্যান

1
আমি মনে করি না এটি @ ব্রায়ানের পোস্ট করা মূল উত্তরটির সাথে তুলনা করে সত্যিই জটিলতা যুক্ত করেছে। তদ্ব্যতীত, কিছু লোক ডেটা পুনরায় আকার না দিয়ে এটি করতে চাইতে পারে।
জাস্টিনা

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