Ggplot2 থেকে গ্রিড, পটভূমির রঙ এবং শীর্ষ এবং ডান সীমানা সরান


103

আমি ggplot2 ব্যবহার করে অবিলম্বে নীচে প্লটটি পুনরুত্পাদন করতে চাই। আমি কাছে আসতে পারি, তবে উপরের এবং ডান সীমানা সরাতে পারি না। আমি নীচে ggplot2 ব্যবহার করে বেশ কয়েকটি প্রচেষ্টা উপস্থাপন করেছি, স্ট্যাকওভারফ্লোতে বা এর মাধ্যমে পাওয়া বেশ কয়েকটি পরামর্শ সহ। দুর্ভাগ্যক্রমে আমি সেই পরামর্শগুলি কাজে লাগাতে পারিনি।

আমি আশা করছি যে কেউ নীচের কোড স্নিপেটগুলির এক বা একাধিক সংশোধন করতে সক্ষম হতে পারে।

কোন পরামর্শ করার জন্য আপনাকে ধন্যবাদ।

# desired plot
a <- seq(1,20)
b <- a^0.25
plot(a,b, bty = "l")


library(ggplot2)

df <- as.data.frame(cbind(a,b))

# 1. ggplot2 default
ggplot(df, aes(x = a, y = b)) + geom_point()

# 2. removes background color
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black'))

# 3. also removes gridlines
none <- theme_blank()
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none)

# 4. does not remove top and right border
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(panel.border = none)

# 5. does not remove top and right border
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(axis.line = theme_segment())

# 6. removes x and y axis in addition to top and right border
# http://stackoverflow.com/questions/5458409/remove-top-and-right-border-from-ggplot2
ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts(panel.background=theme_rect(colour=NA))

# 7. returns error when attempting to remove top and right border
# https://groups.google.com/group/ggplot2/browse_thread/thread/f998d113638bf251
#
# Error in el(...) : could not find function "polylineGrob"
#
theme_L_border <- function(colour = "black", size = 1, linetype = 1) { 
   structure( 
     function(x = 0, y = 0, width = 1, height = 1, ...) { 
       polylineGrob( 
         x=c(x+width, x, x), y=c(y,y,y+height), ..., default.units = "npc", 
         gp=gpar(lwd=size, col=colour, lty=linetype), 
       ) 
     }, 
     class = "theme", 
     type = "box", 
     call = match.call() 
   )
}

ggplot(df, aes(x = a, y = b)) + geom_point() + opts(panel.background = theme_rect(fill='white', colour='black')) + opts(panel.grid.major = none, panel.grid.minor = none) + opts( panel.border = theme_L_border())

3
নীচে একটি মন্তব্যে পোস্ট করা হিসাবে, এটি এখন + থিম_ক্ল্যাসিক ()
nsheff

উত্তর:


133

সম্পাদনা এই উত্তর উপেক্ষা করুন। আরও ভাল উত্তর আছে। মন্তব্য দেখুন। ব্যবহার+ theme_classic()

সম্পাদনা

এটি একটি ভাল সংস্করণ। মূল পোস্টে নীচে উল্লিখিত বাগটি রয়ে গেছে (আমি মনে করি)। কিন্তু অক্ষ রেখাটি প্যানেলের নীচে আঁকা। অতএব, উভয় অপসারণ panel.borderএবং panel.backgroundঅক্ষ লাইন দেখতে।

library(ggplot2)
a <- seq(1,20)
b <- a^0.25
df <- as.data.frame(cbind(a,b))

ggplot(df, aes(x = a, y = b)) + geom_point() +
  theme_bw() +
  theme(axis.line = element_line(colour = "black"),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_blank(),
    panel.background = element_blank()) 

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

আসল পোস্ট এটি কাছাকাছি হয়। axis.lineY- অক্ষে কাজ না করার সাথে একটি বাগ ছিল ( এখানে দেখুন ), এটি এখনও ঠিক করা হয়নি বলে মনে হচ্ছে। সুতরাং, প্যানেল সীমানা সরানোর পরে, y- অক্ষগুলি পৃথকভাবে ব্যবহার করে আঁকতে হবে geom_vline

library(ggplot2)
library(grid)

a <- seq(1,20)
b <- a^0.25
df <- as.data.frame(cbind(a,b))

p = ggplot(df, aes(x = a, y = b)) + geom_point() +
   scale_y_continuous(expand = c(0,0)) +
   scale_x_continuous(expand = c(0,0)) +
   theme_bw() +
   opts(axis.line = theme_segment(colour = "black"),
        panel.grid.major = theme_blank(),
        panel.grid.minor = theme_blank(),
        panel.border = theme_blank()) +
    geom_vline(xintercept = 0)
p

চূড়ান্ত পয়েন্টগুলি ক্লিপ করা হয়, তবে ক্লিপিংটি ব্যাপটিস্টে কোড ব্যবহার করে পূর্বাবস্থায় ফেরা যায়

gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name=="panel"] <- "off"
grid.draw(gt)

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

অথবা limitsপ্যানেলের সীমানা সরাতে ব্যবহার করুন ।

ggplot(df, aes(x = a, y = b)) + geom_point() +
   xlim(0,22) +  ylim(.95, 2.1) +
   scale_x_continuous(expand = c(0,0), limits = c(0,22)) +
   scale_y_continuous(expand = c(0,0), limits = c(.95, 2.2)) +   
   theme_bw() +
   opts(axis.line = theme_segment(colour = "black"),
        panel.grid.major = theme_blank(),
        panel.grid.minor = theme_blank(),
        panel.border = theme_blank()) +
    geom_vline(xintercept = 0)

76

Ggplot (0.9.2+) এর সাম্প্রতিক আপডেটগুলি থিমগুলির জন্য সিনট্যাক্সটি ওভারহুল করেছে। সর্বাধিক উল্লেখযোগ্যভাবে, opts()প্রতিস্থাপন করা হয়েছে, এখন অবহেলিত হয় theme()স্যান্ডির উত্তরটি এখনও (জানুয়ারী -12 এ হিসাবে) একটি চার্ট তৈরি করবে, তবে আর সংক্ষেপে সতর্কবার্তা ছুঁড়ে দেবে।

এখানে বর্তমান জিপিপ্লট সিনট্যাক্স প্রতিবিম্বিত কোডগুলি আপডেট করা হয়েছে:

library(ggplot2)
a <- seq(1,20)
b <- a^0.25
df <- as.data.frame(cbind(a,b))

#base ggplot object
p <- ggplot(df, aes(x = a, y = b))

p +
  #plots the points
  geom_point() +

  #theme with white background
  theme_bw() +

  #eliminates background, gridlines, and chart border
  theme(
    plot.background = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_blank()
  ) +

  #draws x and y axis line
  theme(axis.line = element_line(color = 'black'))

উত্পন্ন:

প্লটের আউটপুট


33
বা আরও সহজভাবে? ggplot (df, aes (x = a, y = b)) + geom_Point () + থিম_ক্লাসিক ()
ব্যবহারকারী 20650

এই পদ্ধতির কোনওটিই ggplot2 2.1.0 ব্যবহার করে আমার পক্ষে কাজ করে না ... @ wkretzsch এর উত্তর ভাল ছিল।
নোভা

25

এর বিকল্প theme_classic()হ'ল থিম যা কাওপ্লট প্যাকেজটি নিয়ে আসে theme_cowplot()(প্যাকেজের সাথে স্বয়ংক্রিয়ভাবে লোড হয়)। এটি theme_classic()কয়েকটি সূক্ষ্ম পার্থক্যের সাথে মিল দেখায় । সর্বাধিক গুরুত্বপূর্ণভাবে, ডিফল্ট লেবেল আকারগুলি বৃহত্তর, ফলে ফলস্বরূপ পরিসংখ্যানগুলি আরও প্রয়োজনীয় পরিবর্তন ছাড়াই প্রকাশনাগুলিতে ব্যবহার করা যেতে পারে (বিশেষত যদি আপনি এটির save_plot()পরিবর্তে সেগুলি সংরক্ষণ করেন ggsave())। এছাড়াও, ব্যাকগ্রাউন্ডটি স্বচ্ছ, সাদা নয়, আপনি যদি চিত্রকগুলিতে চিত্রটি সম্পাদনা করতে চান তবে এটি কার্যকর হতে পারে। পরিশেষে, আমার মতামতযুক্ত, প্লটযুক্ত প্লটগুলি আরও ভাল দেখাচ্ছে।

উদাহরণ:

library(cowplot)
a <- seq(1,20)
b <- a^0.25
df <- as.data.frame(cbind(a,b))

p <- ggplot(df, aes(x = a, y = b)) + geom_point()
save_plot('plot.png', p) # alternative to ggsave, with default settings that work well with the theme

plot.pngএই কোড দ্বারা উত্পাদিত ফাইলটি দেখতে এই জাতীয় দেখাচ্ছে: এখানে চিত্র বর্ণনা লিখুন

দাবি অস্বীকার: আমি প্যাকেজ লেখক।


8

আমি অ্যান্ড্রুয়ের উত্তর অনুসরণ করেছি , তবে আমার জিপিপ্লাটের সংস্করণে একটি বাগের কারণে https://stackoverflow.com/a/35833548 এবং এক্স এবং y অক্ষ পৃথকভাবে সেট করতে হয়েছিল।

পরিবর্তে

theme(axis.line = element_line(color = 'black'))

আমি ব্যবহার করতাম

theme(axis.line.x = element_line(color="black", size = 2),
    axis.line.y = element_line(color="black", size = 2))

3

উপরোক্ত বিকল্পগুলি sfএবং এর সাথে নির্মিত মানচিত্রের জন্য কাজ করে না geom_sf()। অতএব, আমি ndiscrএখানে সম্পর্কিত প্যারামিটার যুক্ত করতে চাই । এটি কেবল বৈশিষ্ট্যগুলি দেখায় একটি দুর্দান্ত পরিষ্কার মানচিত্র তৈরি করবে।

library(sf)
library(ggplot2)

ggplot() + 
  geom_sf(data = some_shp) + 
  theme_minimal() +                     # white background
  theme(axis.text = element_blank(),    # remove geographic coordinates
        axis.ticks = element_blank()) + # remove ticks
  coord_sf(ndiscr = 0)                  # remove grid in the background

1

উপরের অ্যান্ড্রু এর উত্তর থেকে সরলীকরণ এই মূল থিমটি অর্ধেক সীমানা তৈরি করতে পরিচালিত করে।

theme (panel.border = element_blank(),
       axis.line    = element_line(color='black'))

0

এখানে একটি অত্যন্ত সহজ উত্তর

yourPlot +
  theme(
    panel.border = element_blank(), 
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(), 
    axis.line = element_line(colour = "black")
    )

এটা এত সহজ। সূত্র: এই নিবন্ধের শেষ

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