বিভিন্ন আকার এবং রঙ সহ একটি ggplot2 সাবটাইটেল কীভাবে যুক্ত করবেন?


89

বৃষ্টিপাতের বারপ্লটগুলি উন্নত করতে আমি ggplot2 ব্যবহার করছি।

আমি কী অর্জন করতে চাই তার একটি পুনরায় উত্পাদনযোগ্য উদাহরণ:

library(ggplot2)
library(gridExtra)
secu <- seq(1, 16, by=2)
melt.d <- data.frame(y=secu, x=LETTERS[1:8])
m <- ggplot(melt.d, aes(x=x, y=y)) +
  geom_bar(fill="darkblue") + 
  labs(x="Weather    stations", y="Accumulated Rainfall [mm]") +
  opts(axis.text.x=theme_text(angle=-45, hjust=0, vjust=1),
       title=expression("Rainfall"), plot.margin = unit(c(1.5, 1, 1, 1), "cm"),
       plot.title = theme_text(size = 25, face = "bold", colour = "black", vjust = 5))
z <- arrangeGrob(m, sub = textGrob("Location", x = 0, hjust = -3.5, vjust = -33, gp = gpar(fontsize = 18, col = "gray40"))) #Or guessing x and y with just option
z

আমি জানি না কীভাবে জিপিপ্লাট 2-তে এইচড এবং ভল্টের উপর অনুমান সংখ্যা ব্যবহার করা এড়ানো যায়? উপশিরোনাম স্থাপনের আরও ভাল উপায় আছে (কেবলমাত্র \ n ব্যবহার করে নয়, তবে বিভিন্ন পাঠ্যের রঙ এবং আকার সহ একটি উপশিরোনাম)?

আমার পিডিএফ ফাইল থাকতে ggsave এর সাহায্যে সক্ষম হতে হবে।

এখানে দুটি সম্পর্কিত প্রশ্ন:

আর প্লটের জায়গার বাইরে একটি পাদটীকা উদ্ধৃতি যুক্ত করবেন?

আমি কীভাবে সাবটাইটেল যুক্ত করতে এবং আর জি-জি প্লট প্লটের ফন্টের আকার পরিবর্তন করতে পারি?

কোন সাহায্যের জন্য ধন্যবাদ।


বৈধতা = -33 আমার জন্য লিনাক্সে কাজ করেছিল। আমি জানি যে সাব বোঝানো হচ্ছে প্লটের নীচে যাওয়া, তবে এটিই ছিল আমি যা চাই তা পেয়েছিলাম।
মিগু

কোনও কারণে এটি আমার
প্লটটিকে

4
@hrbrmstr এর উত্তরটি আজকাল যাবার উপায় বলে মনে হচ্ছে
andschar

উত্তর:


103

সর্বশেষ ggplot2 বিল্ডস (যেমন, 2.1.0.9000 বা আরও নতুন) বিল্ট ইন কার্যকারিতা হিসাবে সাবটাইটেল এবং নীচে প্লট ক্যাপশন রয়েছে। এর অর্থ আপনি এটি করতে পারেন:

library(ggplot2) # 2.1.0.9000+ 

secu <- seq(1, 16, by=2)
melt.d <- data.frame(y=secu, x=LETTERS[1:8])

m <-  ggplot(melt.d, aes(x=x, y=y))
m <- m + geom_bar(fill="darkblue", stat="identity")
m <- m + labs(x="Weather    stations", 
              y="Accumulated Rainfall [mm]",
              title="Rainfall",
              subtitle="Location")
m <- m + theme(axis.text.x=element_text(angle=-45, hjust=0, vjust=1)) 
m <- m + theme(plot.title=element_text(size=25, hjust=0.5, face="bold", colour="maroon", vjust=-1))
m <- m + theme(plot.subtitle=element_text(size=18, hjust=0.5, face="italic", color="black"))
m

। "Plot.subtitle" হয় একটি বৈধ থিম উপাদান নাম: (ফাংশন (এল, elname) ত্রুটি
Luis de সুসা

4
দয়া করে উত্তরগুলি পড়ুন: "সর্বশেষ ggplot2 বিল্ডস (যেমন, 2.1.0.9000 বা আরও নতুন)"
hrbrmstr

75

এই উত্তর ggplot2 সংস্করণটিকে উপেক্ষা করুন 2.2.0 এর শিরোনাম এবং উপশিরোনাম কার্যকারিতা রয়েছে। নীচে @ hrbrmstr এর উত্তর দেখুন


আপনি বিভিন্ন আকার পেতে একের atopভিতরে নেস্টেড ফাংশন ব্যবহার করতে পারেন expression

সম্পাদনা ggplot2 0.9.3 জন্য আপডেট কোড

m <-  ggplot(melt.d, aes(x=x, y=y)) + 
     geom_bar(fill="darkblue", stat = "identity") + 
     labs(x="Weather    stations", y="Accumulated Rainfall [mm]") + 
     ggtitle(expression(atop("Rainfall", atop(italic("Location"), "")))) +
     theme(axis.text.x = element_text(angle=-45, hjust=0, vjust=1), 
     #plot.margin = unit(c(1.5, 1, 1, 1), "cm"), 
     plot.title = element_text(size = 25, face = "bold", colour = "black", vjust = -1))

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


10
হাই, এটি একটি আশ্চর্যজনক সমাধান। আমি এটা ব্যবহার করতে কিন্তু পরিবর্তে চাই atop(italic("Location")আমি একটি বস্তুর আছে করতে চায়: atop(italic(my_string_vector)। আমি চেষ্টা করেছিলাম তবে তারপরে সাবটাইটেলটি (মাই_স্ট্রিং_ভেেক্টর) এ মূল্যায়ন করা হয়েছে । এই অভিব্যক্তিটি কীভাবে স্ট্রিংয়ের মান ব্যবহার করতে বাধ্য করা হবে এবং প্রদত্ত পাঠ্যটিকে আক্ষরিক আচরণ করবে না?
Konrad

4
যদি আপনি ভেরিয়েবল ব্যবহার করে আপনি ব্যবহার করা উচিত যন্ত্রণার ভুগেন bquoteপরিবর্তে expressionদেখতে এখানে
toto_tico

4
@Konrad করার জন্য ব্যবহার বস্তু, প্রতিস্থাপন expressionসঙ্গে bquoteসঙ্গে বস্তু মোড়ানো .(), ভালো, একটি প্রধান শিরোনাম একটি বস্তু "main.title" বলা এবং একটি সাবটাইটেল একটি বস্তু সঞ্চিত জন্য সংরক্ষিত "sub.title" বলা জন্য: ggtitle(bquote(atop(.(main.title), atop(italic(.(sub.title)), "")))) ক্রেডিট Didzis যায় Elferts এখানে উত্তর: stackoverflow.com/questions/19957536/...
coip

10

এটি প্রদর্শিত optsহয় ggplot 2 0.9.1 হিসাবে অবহেলিত এবং আর কার্যকরী নয়। এই আজকের সর্বশেষ সংস্করণের সাথে আমার জন্য কাজ: + ggtitle(expression(atop("Top line", atop(italic("2nd line"), ""))))


এটি চূড়ান্ত ছাড়াও কাজ করে , ""- সেই অংশটি কীসের জন্য?
nnot101

আমাকে মারছে। আমি অন্য কোথাও দেখেছি এমন একটি উদাহরণ অনুলিপি করে থাকতে পারি।
আরেন কাম্ব্রে

সম্ভবত উপরের @ স্যান্ডি মুষ্পপ্র্যাট এর উত্তর থেকে: পি - আমি এখন বুঝতে পেরেছি, atop()এটি বার ছাড়া কোনও ভগ্নাংশের মতো like সুতরাং দ্বিতীয়টির atop()প্রথমটির ভিতরে রাখলে একটি আনুপাতিকভাবে ছোট পাঠ সহ একটি উপ-ভগ্নাংশ দেয়। ""উপ-ভগ্নাংশ নীচে হয়। এটি অপ্রয়োজনীয় বলে মনে হচ্ছে - সম্ভবত atop()দ্বিতীয় প্যারামিটারের জন্য কোনও ডিফল্ট খালি স্ট্রিং বা অন্য কোনও কিছু রয়েছে।
naught101

এটি দেখা যাচ্ছে @ আমার অনুরূপ কোড প্রতিবিম্বিত করার জন্য আমার উত্তর পোস্ট করার পরে স্যান্ডিমসপ্র্যাট এর উত্তরটি পরিবর্তন করা হয়েছিল । :-)
অ্যারেন কাম্ব্রে

9

জিটিবেলে গ্রাবগুলি যুক্ত করা এবং সেইভাবে অভিনব শিরোনাম তৈরি করা খুব বেশি কঠিন নয়,

library(ggplot2)
library(grid)
library(gridExtra)
library(magrittr)
library(gtable)

p <- ggplot() + 
  theme(plot.margin = unit(c(0.5, 1, 1, 1), "cm"))

lg <- list(textGrob("Rainfall", x=0, hjust=0, 
                    gp = gpar(fontsize=24, fontfamily="Skia", face=2, col="turquoise4")),
               textGrob("location", x=0, hjust=0, 
                        gp = gpar(fontsize=14, fontfamily="Zapfino", fontface=3, col="violetred1")),
           pointsGrob(pch=21, gp=gpar(col=NA, cex=0.5,fill="steelblue")))

margin <- unit(0.2, "line")
tg <- arrangeGrob(grobs=lg, layout_matrix=matrix(c(1,2,3,3), ncol=2),
                  widths = unit.c(grobWidth(lg[[1]]), unit(1,"null")),
                  heights = do.call(unit.c, lapply(lg[c(1,2)], grobHeight)) + margin)

grid.newpage()
ggplotGrob(p) %>%
  gtable_add_rows(sum(tg$heights), 0) %>%
  gtable_add_grob(grobs=tg, t = 1, l = 4)  %>%
  grid.draw()

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


8

এই সংস্করণটি একটি gtableফাংশন ব্যবহার করে। এটি শিরোনামে পাঠ্য দুটি লাইন অনুমতি দেয়। প্রতিটি লাইনের পাঠ্য, আকার, রঙ এবং ফন্টের মুখটি অন্যটির থেকে আলাদাভাবে সেট করা যেতে পারে। তবে, ফাংশনটি কেবল একটি একক প্লট প্যানেল সহ একটি প্লটকে সংশোধন করবে।

গৌণ সম্পাদনা: ggplot2 v2.0.0 এ আপডেট করা

# The original plot
library(ggplot2)

secu <- seq(1, 16, by = 2)
melt.d <- data.frame(y = secu, x = LETTERS[1:8])

m <- ggplot(melt.d, aes(x = x, y = y)) + 
     geom_bar(fill="darkblue", stat = "identity") + 
     labs(x = "Weather    stations", y = "Accumulated Rainfall [mm]") + 
     theme(axis.text.x = element_text(angle = -45, hjust = 0, vjust = 1))


# The function to set text, size, colour, and face
plot.title = function(plot = NULL, text.1 = NULL, text.2 = NULL, 
   size.1 = 12,  size.2 = 12,
   col.1 = "black", col.2 = "black", 
   face.1 = "plain",  face.2 = "plain") {

library(gtable)
library(grid)

gt = ggplotGrob(plot)

text.grob1 = textGrob(text.1, y = unit(.45, "npc"), 
   gp = gpar(fontsize = size.1, col = col.1, fontface = face.1))
text.grob2 = textGrob(text.2,  y = unit(.65, "npc"), 
   gp = gpar(fontsize = size.2, col = col.2, fontface = face.2))

text = matrix(list(text.grob1, text.grob2), nrow = 2)
text = gtable_matrix(name = "title", grobs = text, 
   widths = unit(1, "null"), 
   heights = unit.c(unit(1.1, "grobheight", text.grob1) + unit(0.5, "lines"), unit(1.1,  "grobheight", text.grob2) + unit(0.5, "lines")))

gt = gtable_add_grob(gt, text, t = 2, l = 4)
gt$heights[2] = sum(text$heights)

class(gt) =  c("Title", class(gt))

gt
}

# A print method for the plot
print.Title <- function(x) {
   grid.newpage()   
   grid.draw(x)
}


# Try it out - modify the original plot
p = plot.title(m, "Rainfall", "Location", 
   size.1 = 20, size.2 = 15, 
   col.1 = "red", col.2 = "blue", 
   face.2 = "italic")

p

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


3

আপনি গ্রিডকে প্লট মোড়তে ব্যবহার করতে পারেন range

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

library(ggplot2)
library(gridExtra)

p <- ggplot() + 
  theme(plot.margin = unit(c(0.5, 1, 1, 1), "cm"))

tg <- grobTree(textGrob("Rainfall", y=1, vjust=1, gp = gpar(fontsize=25, face=2, col="black")),
               textGrob("location", y=0, vjust=0, gp = gpar(fontsize=12, face=3, col="grey50")),
               cl="titlegrob")
heightDetails.titlegrob <- function(x) do.call(sum,lapply(x$children, grobHeight))

grid.arrange(p, top = tg)

Ggplot এর বর্তমান সংস্করণগুলি যথাক্রমে অপ্টস এবং থিম_টেক্সটের পরিবর্তে থিম এবং এবং এলিমেন্ট_টেক্সট ব্যবহার করে। এছাড়াও, ggplotGrob পদ্ধতির গ্রিডএক্সট্রা (গ্রিডএক্সট্রা_0.8.1) এবং ggplot2 (ggplot2_0.9.3.1) এর বর্তমান সংস্করণে ব্যর্থ হয়েছে বলে মনে হয়েছে
রাসেলপিয়ের্স

2

আপনি হয়ত লক্ষ্য করেছেন যে স্যান্ডির কোড "বৃষ্টিপাত" এর জন্য সাহসী শিরোনাম তৈরি করে না - এই সাহসী করার নির্দেশটি থিম () ফাংশনের পরিবর্তে উপরে () ফাংশনের মধ্যে উপস্থিত হওয়া উচিত।

ggplot(melt.d, aes(x=x, y=y)) + 
 geom_bar(fill="darkblue", stat = "identity") + 
 labs(x="Weather    stations", y="Accumulated Rainfall [mm]") + 
 ggtitle(expression(atop(bold("Rainfall"), atop(italic("Location"), "")))) +
 theme(axis.text.x = element_text(angle=-45, hjust=0, vjust=1),
 plot.title = element_text(size = 25, colour = "black", vjust = -1))

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

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