অক্ষের লেবেলগুলিকে ggplot2 এ আবর্তন এবং স্পেসিং করছে


668

আমার একটি প্লট রয়েছে যেখানে এক্স-অক্ষটি এমন একটি ফ্যাক্টর যার লেবেলগুলি দীর্ঘ। যদিও সম্ভবত কোনও আদর্শ চাক্ষুষ নয়, আপাতত আমি এই লেবেলগুলি উল্লম্বভাবে ঘোরানো চাই। আমি নীচের কোড দিয়ে এই অংশটি বের করে ফেলেছি, তবে আপনি দেখতে পাচ্ছেন, লেবেলগুলি সম্পূর্ণ দৃশ্যমান নয়।

data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + opts(axis.text.x=theme_text(angle=-90))

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

উত্তর:


1109

শেষ লাইনটি এ পরিবর্তন করুন

q + theme(axis.text.x = element_text(angle = 90, hjust = 1))

ডিফল্টরূপে, অক্ষগুলি ঘোরানো হলেও পাঠ্যের কেন্দ্রে প্রান্তিক হয়। আপনি যখন +/- 90 ডিগ্রি ঘোরেন, আপনি সাধারণত এটি পরিবর্তে প্রান্তে প্রান্তিককরণ করতে চান:

বিকল্প পাঠ

উপরের চিত্রটি এই ব্লগ পোস্ট থেকে


95
q + theme(axis.text.x=element_text(angle = -90, hjust = 0))
Ggplot2

55
যাদের বর্ণনামূলকভাবে এখানে বর্ণিত হিসাবে আচরণ করা হচ্ছে না তাদের জন্য চেষ্টা করুন theme(axis.text.x=element_text(angle = 90, vjust = 0.5))। Ggplot2 0.9.3.1 হিসাবে এটি সমাধান বলে মনে হচ্ছে।
লিলস্টার

42
আসলে, সঠিকভাবে সারিবদ্ধ লেবেলগুলি পেতে আমাকে উপরের দুটি সমাধান একত্রিত করতে হয়েছিল:q + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
jupp0r

32
@ জুপ্পেআর এর সঠিক theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))একমাত্র কাজ চলমান।

51
আপনি যদি 45 ° ঘোরানো লেবেল চান (সহজে পড়তে পারেন) theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))ভাল ফলাফল দেয়
জান-গ্লেক্স

88

টিক লেবেলে পাঠ্যটি সম্পূর্ণরূপে দৃশ্যমান করতে এবং y-axis লেবেলের একই দিকে পড়তে, শেষ লাইনটি এতে পরিবর্তন করুন

q + theme(axis.text.x=element_text(angle=90, hjust=1))

81

ব্যবহার coord_flip()

data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))

qplot(cut,carat,data = diamonds, geom = "boxplot") +
  coord_flip()

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


অধ্যায় এর 3.9 ইন ডেটা বিজ্ঞান জন্য R , আপনি Wickham এবং Grolemund এই সঠিক প্রশ্ন কথা বলতে:

coord_flip()এক্স এবং ওয়াই অক্ষটি পরিবর্তন করে। আপনি যদি অনুভূমিক বক্সপ্লটগুলি চান তবে এটি দরকারী (উদাহরণস্বরূপ) is এটি দীর্ঘ লেবেলগুলির জন্যও কার্যকর: এক্স-অক্ষে ওভারল্যাপ না করে এগুলি ফিট করা শক্ত।


26

ক্যানভাস রোটেশন বৈশিষ্ট্যটি প্রবর্তন করার পরে, আমি একটি বিকল্প সমাধান সরবরাহ করতে চাই, আমি যা প্রস্তাব করতে চলেছি তার অনুরূপ একটি শক্ত সমাধান g

মূলত, আপনার ত্রিগুণমিতি ব্যবহার করে আপেক্ষিক অবস্থানগুলি নির্ধারণ করতে হবে, এমন একটি ফাংশন তৈরি করে যা কোনও element_textবস্তু দেয়, প্রদত্ত কোণ (অর্থাত্ ডিগ্রি) এবং অবস্থান (যেমন x, y, শীর্ষ বা ডানগুলির মধ্যে একটি) তথ্য দেয়।

#Load Required Libraries
library(ggplot2)
library(gridExtra)

#Build Function to Return Element Text Object
rotatedAxisElementText = function(angle,position='x'){
  angle     = angle[1]; 
  position  = position[1]
  positions = list(x=0,y=90,top=180,right=270)
  if(!position %in% names(positions))
    stop(sprintf("'position' must be one of [%s]",paste(names(positions),collapse=", ")),call.=FALSE)
  if(!is.numeric(angle))
    stop("'angle' must be numeric",call.=FALSE)
  rads  = (angle - positions[[ position ]])*pi/180
  hjust = 0.5*(1 - sin(rads))
  vjust = 0.5*(1 + cos(rads))
  element_text(angle=angle,vjust=vjust,hjust=hjust)
}

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

#Demonstrate Usage for a Variety of Rotations
df    = data.frame(x=0.5,y=0.5)
plots = lapply(seq(0,90,length.out=4),function(a){
  ggplot(df,aes(x,y)) + 
    geom_point() + 
    theme(axis.text.x = rotatedAxisElementText(a,'x'),
          axis.text.y = rotatedAxisElementText(a,'y')) +
    labs(title = sprintf("Rotated %s",a))
})
grid.arrange(grobs=plots)

যা নিম্নলিখিত উত্পাদন করে:

উদাহরণ


1
আমি একই ফলাফলগুলি পাই না, আমার জন্য অক্ষ পাঠ্যটি কখনই আপনার স্বয়ংক্রিয় পদ্ধতি ব্যবহার করে ভালভাবে সামঞ্জস্য হয় না। তবে rads = (-angle - positions[[ position ]])*pi/180উত্পাদিত আরও ভাল স্থাপনা ব্যবহার করে । কোণের আগে অতিরিক্ত বিয়োগ চিহ্নটি নোট করুন। যাইহোক কোডের জন্য ধন্যবাদ :)
asac

7

Ggpubr প্যাকেজ অফার একটি শর্টকাট ডিফল্ট (ডান প্রান্তিককরণ পাঠ্য, পাঠ্য মাঝখানে সারিবদ্ধ বক্সে টিক পর্যন্ত) দ্বারা ডান জিনিস আছে:

library(ggplot2)
diamonds$cut <- paste("Super Dee-Duper", as.character(diamonds$cut))
q <- qplot(cut, carat, data = diamonds, geom = "boxplot")
q + ggpubr::rotate_x_text()

2018-11-06 এ ডিপেক্স প্যাকেজ (v0.2.1) দ্বারা নির্মিত

সম্পর্কিত আর্গুমেন্টের নামগুলির জন্য একটি গিটহাব অনুসন্ধানের সাথে পাওয়া গেছে: https://github.com/search?l=R&q=element_text+ Ang++++++%%Acran&type=Code


5

অন্যথা, ggplot 3.3.0প্রদান করে guide_axis(n.dodge = 2)(যেমন guideযুক্তি scale_..বা xযুক্তি guides) উল্লম্বভাবে লেবেল লুকাচুরি দ্বারা ওভার ষড়যন্ত্র সমস্যা কাটিয়ে ওঠার জন্য। এই ক্ষেত্রে এটি বেশ ভাল কাজ করে:

library(ggplot2)
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))

ggplot(diamonds, aes(cut, carat)) + 
  geom_boxplot() +
  scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
  NULL


1

অতিরিক্ত নির্ভরতা ছাড়াই পঠনযোগ্য এক্স টিক লেবেল পেতে, আপনি ব্যবহার করতে চান:

  ... +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) +
  ...

এটি টিক লেবেলগুলি 90 ° ঘড়ির কাঁটার বিপরীতে ঘোরায় এবং তাদের শেষ ( hjust = 1) এবং তাদের কেন্দ্রগুলিকে আনুভূমিকভাবে সম্পর্কিত টিক চিহ্ন ( vjust = 0.5) এর সাথে উলম্বভাবে সারিবদ্ধ করে ।

সম্পূর্ণ উদাহরণ:

library(ggplot2)
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))


দ্রষ্টব্য, যে উল্লম্ব / অনুভূমিক ন্যায়সঙ্গত পরামিতি vjust/ hjustএর element_textপাঠ্যের সাথে সম্পর্কিত। সুতরাং, অনুভূমিক প্রান্তিককরণের vjustজন্য দায়ী ।

vjust = 0.5এটি ছাড়া এটি দেখতে হবে:

q + theme(axis.text.x = element_text(angle = 90, hjust = 1))

hjust = 1এটি ছাড়া এটি দেখতে হবে:

q + theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

কিছু (তারযুক্ত) কারণ আপনি টিক ঘোরাতে চেয়েছিলেন জন্য লেবেল যদি 90 ° ঘড়ির কাঁটার দিকে (যেমন যে তারা বাম দিক থেকে পড়া যায়) আপনি ব্যবহার করতে হবে হবে: q + theme(axis.text.x = element_text(angle = -90, vjust = 0.5, hjust = -1))

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


0

এর বিকল্প প্যাকেজটি coord_flip()ব্যবহার করা ggstance। সুবিধাটি হ'ল এটি অন্যান্য গ্রাফের সাথে গ্রাফগুলি একত্রিত করা সহজ করে এবং আপনি সম্ভবত আরও গুরুত্বপূর্ণভাবে আপনার স্থানাঙ্ক ব্যবস্থার জন্য নির্দিষ্ট স্কেল অনুপাত নির্ধারণ করতে পারেন ।

library(ggplot2)
library(ggstance)

diamonds$cut <- paste("Super Dee-Duper", as.character(diamonds$cut))

ggplot(data=diamonds, aes(carat, cut)) + geom_boxploth()

2020-03-11 তারিখে ডিপেক্স প্যাকেজ দ্বারা নির্মিত (v0.3.0)

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