ফেসবুক লেবেল কীভাবে পরিবর্তন করবেন?


230

আমি নিম্নলিখিত ggplotকমান্ডটি ব্যবহার করেছি :

ggplot(survey, aes(x = age)) + stat_bin(aes(n = nrow(h3), y = ..count.. / n), binwidth = 10)
  + scale_y_continuous(formatter = "percent", breaks = c(0, 0.1, 0.2))
  + facet_grid(hospital ~ .)
  + theme(panel.background = theme_blank())

উৎপাদন করা

বিকল্প পাঠ

তবে আমি ফেসবুকে লেবেলগুলি আরও ছোট করতে চাই (যেমন Hosp 1, Hosp 2...) কারণ তারা এখন অনেক দীর্ঘ এবং জটিল দেখায় (গ্রাফের উচ্চতা বৃদ্ধি কোনও বিকল্প নয়, এতে খুব বেশি জায়গা লাগবে দলিল). আমি ফেসবুক_গ্রিড সহায়তা পৃষ্ঠাটির দিকে চেয়েছিলাম তবে কীভাবে তা বুঝতে পারি না।

উত্তর:


123

অন্তর্নিহিত ফ্যাক্টর স্তরের নামগুলি এমন কিছু দিয়ে পরিবর্তন করুন:

# Using the Iris data
> i <- iris
> levels(i$Species)
[1] "setosa"     "versicolor" "virginica" 
> levels(i$Species) <- c("S", "Ve", "Vi")
> ggplot(i, aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)

12
@wishihadabettername: অন্তর্নিহিত তথ্য পরিবর্তন এড়ানোর জন্য, আপনি ব্যবহার করতে পারেন: ggplot(transform(iris, Species = c("S", "Ve", "Vi")[as.numeric(Species)]), aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)
Arnaud একটি

1
সম্পর্কিত ... আপনি যদি প্যানেল লেবেলকে একটি বিকাট () এক্সপ্রেশন (উদাহরণস্বরূপ) হতে চান তবে levels(x$measurements) <- c(bquote(Area ~~ (cm^2)), bquote(Length ~~ (cm)))এটি গাণিতিক প্রকাশে উপস্থিত হবে না। কেউ কীভাবে ফেসবুক লেবেল হিসাবে এক্সপ্রেশন দেখায়?
ব্রায়ান ডি

ফেসবুকে লেবেলে প্রকাশের জন্য সম্পর্কিত labellerবিকল্পগুলির জন্য এই বিকল্পটি ব্যবহার করুন facet_grid: স্ট্যাকওভারফ্লো
ব্রায়ান ডি

285

এখানে এমন একটি সমাধান রয়েছে যা আপনার ডেটা সম্পাদনা এড়িয়ে চলে:

বলুন যে আপনার প্লটটি groupআপনার ডেটাফ্রেমের অংশের সাথে সামঞ্জস্যপূর্ণ, যার স্তর রয়েছে control, test1, test2, তারপরে সেই মানগুলির দ্বারা নামের একটি তালিকা তৈরি করুন:

hospital_names <- list(
  'Hospital#1'="Some Hospital",
  'Hospital#2'="Another Hospital",
  'Hospital#3'="Hospital Number 3",
  'Hospital#4'="The Other Hospital"
)

তারপরে একটি 'লেবেলার' ফাংশন তৈরি করুন এবং এটি আপনার ফেসট_গ্রিড কলটিতে চাপ দিন:

hospital_labeller <- function(variable,value){
  return(hospital_names[value])
}

ggplot(survey,aes(x=age)) + stat_bin(aes(n=nrow(h3),y=..count../n), binwidth=10)
 + facet_grid(hospital ~ ., labeller=hospital_labeller)
 ...

এই হাসপাতালের_নাম তালিকা তালিকার জন্য ডাটা ফ্রেমের স্তরগুলি ব্যবহার করে তালিকার মানগুলি (সঠিক নামগুলি) ফেরত দেয়।


দয়া করে মনে রাখবেন যে এটি কেবলমাত্র যদি আপনার কেবলমাত্র একটি ফেসিং ভেরিয়েবল থাকে তা কাজ করে। যদি আপনার দুটি দিক থাকে, তবে আপনার লেবেলারের ফাংশনটিতে প্রতিটি ফ্যাক্টের জন্য আলাদা নাম ভেক্টর ফিরিয়ে নেওয়া দরকার। আপনি এই জাতীয় কিছু দিয়ে এটি করতে পারেন:

plot_labeller <- function(variable,value){
  if (variable=='facet1') {
    return(facet1_names[value])
  } else {
    return(facet2_names[value])
  }
}

যেখানে facet1_namesএবং facet2_namesপূর্বে সূচকগুলির নাম অনুসারে সূচিত নামের পূর্বনির্ধারিত তালিকাগুলি ('হোস্টপাইটাল # 1' ইত্যাদি)।


সম্পাদনা: উপরের পদ্ধতিটি ব্যর্থ হয় যদি আপনি কোনও পরিবর্তনশীল / মান সংমিশ্রণটি পাস করেন যা লেবেলার জানেন না। আপনি এই জাতীয় অজানা ভেরিয়েবলের জন্য একটি ব্যর্থ-নিরাপদ যুক্ত করতে পারেন:

plot_labeller <- function(variable,value){
  if (variable=='facet1') {
    return(facet1_names[value])
  } else if (variable=='facet2') {
    return(facet2_names[value])
  } else {
    return(as.character(value))
  }
}

ফিক্স এবং মার্জিন = সত্যের সাথে ggplot এ স্ট্রিপ.টেক্সট লেবেলগুলি কীভাবে পরিবর্তন করবেন তা থেকে উত্তর উত্তর


সম্পাদনা: সতর্কতা : আপনি যদি এই পদ্ধতিটি কোনও অক্ষর কলামের মুখোমুখি করতে ব্যবহার করেন তবে আপনি ভুল লেবেল পাচ্ছেন। দেখুন এই বাগ রিপোর্ট ggplot2 এর সাম্প্রতিক সংস্করণগুলিতে স্থির।


9
দুর্দান্ত, তবে ফেস_আর্যাপের সাথে কাজ করবে না, যেখানে @ ভিনস সলিউশনও ফেসবুকে-র্যাপ দিয়ে কাজ করবে।
Arnaud একটি

@ আরনাউদ আমজল্ল্যাগ: সঠিক, যদিও কেউ যদি কিছুটা সময় অনুদানের মত মনে করেন তবে ভবিষ্যতে তা হতে পারে
নিট 101

অজানা ফেসটিং ভেরিয়েবলগুলির জন্য একটি ব্যর্থ-নিরাপদ যুক্ত করা হয়েছে।
nnot101

16
বিজ্ঞপ্তি: এটি ggplot2 v.2 এ কাজ করে না - লেবেলারের ফাংশন পরিবর্তিত হয়েছে। @mbirons উত্তর কাজ করে stackoverflow.com/a/34811062/162832
আন্দ্রিয়াস

আকর্ষণীয়, তবে এটি সর্বদা কার্যকর হয় না, কারণগুলি সম্পাদনা সর্বদা করে।
প্যাট্রিকটি

214

@ নট 101 দ্বারা প্রদত্ত একের চেতনায় রয়েছে এমন আরও একটি সমাধান এখানে but

মূলত, আপনি প্রথমে একটি নামকৃত চরিত্র ভেক্টর তৈরি করেন

hospital_names <- c(
                    `Hospital#1` = "Some Hospital",
                    `Hospital#2` = "Another Hospital",
                    `Hospital#3` = "Hospital Number 3",
                    `Hospital#4` = "The Other Hospital"
                    )

এবং তারপরে আপনি এটি @ নট 101 দ্বারা প্রদত্ত কোডের শেষ লাইনটি সংশোধন করে লেবেলার হিসাবে ব্যবহার করুন

... + facet_grid(hospital ~ ., labeller = as_labeller(hospital_names))

আশাকরি এটা সাহায্য করবে.


জিজিপ্লট 2 এর কোন ভেরিওন রয়েছে as_labeller? আমি CRAN গিটহাব সংগ্রহস্থলের জন্য কিছু উত্স কোড খুঁজে পেয়েছি , তবে সর্বশেষতম সংস্করণে (সিআরএএন-তে!) আপগ্রেড করার পরে আমার কাছে ফাংশনটি মনে হচ্ছে না।
n1k31t4

এটা বিরক্তিকর. আমি সিআরএএন এর মাধ্যমেও আপডেট করেছি। এখানে ডকুমেন্টেশন ডকুমেন্টস. ggplot2.org/dev/as_labeller.html
এমবিউন

4
এটি দুর্দান্ত। আপনার ফেসবুক গ্রিডে যদিও দুটি ভেরিয়েবল থাকে তবে কী ঘটে? পছন্দ hospital ~ genderনাকি কিছু? উভয় অক্ষতে লেবেলার ব্যবহার করার কোনও উপায় আছে? আমি ডক্সে সুস্পষ্ট কিছু দেখতে পাচ্ছি না।
naught101

3
আপনি যদি কোনও উত্তর দিয়ে শুরু করেন তবে নোট করুন, এটি কেবলমাত্র একটি সি () একটি তালিকা () নয় দিয়ে কাজ করে ।
thosmas88wp

1
এর একটি দুর্দান্ত অংশ হ'ল এটি ফেসবুক গ্রিডের উভয় অক্ষের সাথে কাজ করে!
কলম ইউ

30

আমি এখানে facet_grid(yfacet~xfacet)ggplot2, সংস্করণ ২.২.১ ব্যবহার করে এটি কীভাবে করেছি :

facet_grid(
    yfacet~xfacet,
    labeller = labeller(
        yfacet = c(`0` = "an y label", `1` = "another y label"),
        xfacet = c(`10` = "an x label", `20` = "another x label")
    )
)

দ্রষ্টব্য যে এতে কোনও কল নেই as_labeller()- যা এমন কিছু সময়ের জন্য আমি সংগ্রাম করেছিলাম।

এই পদ্ধতির লেবেলারের ক্রিয়াকলাপে সহায়তা পৃষ্ঠাতে শেষ উদাহরণ দ্বারা অনুপ্রাণিত ।


এইটা কাজ করে!!! আমি অন্যান্য সমাধানগুলি প্রয়োগ করতে পারিনি কারণ প্রস্তাবিত কিছু সমাধানের বর্তমান ggplot2 সংস্করণে অবমূল্যায়ন করা হয়েছিল।
ইয়ানস

আপনার সাথে এসব নামে ভেক্টর গঠন করা যেতে পারে setNames() stackoverflow.com/a/22428439/3362993
jsta

23

আপনার যদি দুটি দিক রয়েছে hospitalএবং roomতবে কেবল একটির নাম পরিবর্তন করতে চান তবে আপনি ব্যবহার করতে পারেন:

facet_grid( hospital ~ room, labeller = labeller(hospital = as_labeller(hospital_names)))

ভেক্টর-ভিত্তিক পদ্ধতির ব্যবহার করে দুটি দিকের নামকরণের জন্য (নট 101 এর উত্তর হিসাবে), আপনি এটি করতে পারেন:

facet_grid( hospital ~ room, labeller = labeller(hospital = as_labeller(hospital_names),
                                                 room = as_labeller(room_names)))

16

অন্তর্নিহিত ডেটা পরিবর্তন করে ছাড়াই পরিবর্তন করার সহজ উপায় হ'ল:

1) প্রতিটি ডিফল্ট মানগুলির জন্য পিছনে টিক চিহ্ন যুক্ত করেas_labeller ফাংশনটি ব্যবহার করে একটি অবজেক্ট তৈরি করুন :

hum.names <- as_labeller(c(`50` = "RH% 50", `60` = "RH% 60",`70` = "RH% 70", `80` = "RH% 80",`90` = "RH% 90", `100` = "RH% 100")) #Necesarry to put RH% into the facet labels

2) আমরা জিজিপ্লট এ যুক্ত করি:

ggplot(dataframe, aes(x=Temperature.C,y=fit))+geom_line()+ facet_wrap(~Humidity.RH., nrow=2,labeller=hum.names)

1
এটি আমার মনে হয় সবচেয়ে মার্জিত পদ্ধতি - এটি কার্যকর এবং ggplot2 সংস্করণ 3.0.0.9000 এর সাথে কাজ করে
ল্যান্ডাক

9

মনে রাখবেন যে এই সমস্যাটি ggplot আপনার ভেরিয়েবলের তুলনায় কম ফ্যাক্টর দেখায় তবে এটি কার্যকরভাবে কাজ করবে না (যা ঘটতে পারে যদি আপনি উদাহরণস্বরূপ সাবসেটিংয়ের জন্য থাকতেন):

 library(ggplot2)
 labeli <- function(variable, value){
  names_li <- list("versicolor"="versi", "virginica"="virg")
  return(names_li[value])
 }

 dat <- subset(iris,Species!="setosa")
 ggplot(dat, aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ ., labeller=labeli)

একটি সহজ সমাধান (নাম_লীতে সমস্ত অব্যবহৃত উপাদানগুলি যুক্ত করার পাশাপাশি, যা ক্লান্তিকর হতে পারে) হ'ল অজানা উপাদানগুলি ড্রপলভেলস () দ্বারা ডায়াল করা, মূল ডেটাসেটে বা লেবেলারের ফাংশনে, দেখুন:

labeli2 <- function(variable, value){
  value <- droplevels(value)
  names_li <- list("versicolor"="versi", "virginica"="virg")
  return(names_li[value])
}

dat <- subset(iris,Species!="setosa")
ggplot(dat, aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ ., labeller=labeli2)

9

এই সমাধানটি @ মমির যা আছে তার খুব কাছাকাছি, তবে প্রথম 4 টি অক্ষর এবং শেষ সংখ্যা আনার মাধ্যমে নামটি ছোট করার জন্য ডিজাইন করা হয়েছে।

library(ggplot2)

# simulate some data
xy <- data.frame(hospital = rep(paste("Hospital #", 1:3, sep = ""), each = 30),
                 value = rnorm(90))

shortener <- function(string) {
  abb <- substr(string, start = 1, stop = 4) # fetch only first 4 strings
  num <- gsub("^.*(\\d{1})$", "\\1", string) # using regular expression, fetch last number
  out <- paste(abb, num) # put everything together
  out
}

ggplot(xy, aes(x = value)) +
  theme_bw() +
  geom_histogram() +
  facet_grid(hospital ~ ., labeller = labeller(hospital = shortener))

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


6

উভয়ই facet_wrapএবং আর্গুমেন্ট হিসাবে facet_gridথেকে ইনপুটও গ্রহণ করে ifelse। সুতরাং যদি মুখোমুখি হওয়ার জন্য ব্যবহৃত চলকটি যৌক্তিক হয় তবে সমাধানটি খুব সহজ:

facet_wrap(~ifelse(variable, "Label if true", "Label if false"))

যদি ভেরিয়েবলের আরও বিভাগ থাকে তবে ifelseবিবৃতিটি নেস্ট করা দরকার

পার্শ্ব প্রতিক্রিয়া হিসাবে, এটি ggplotকলগুলির মধ্যে গ্রুপগুলি তৈরি করার সুযোগ দেয় ।


5

গাণিতিক চিহ্নগুলি, সুপারস্প্রিপ্ট, সাবস্ক্রিপ্ট, প্রথম বন্ধনী / বন্ধনী, .etc পার্স করার সাথে @ ডোমির অনুরূপ অন্য একটি সমাধান যুক্ত করা হচ্ছে।

library(tidyverse)
theme_set(theme_bw(base_size = 18))

### create separate name vectors
# run `demo(plotmath)` for more examples of mathematical annotation in R
am_names <- c(
  `0` = "delta^{15}*N-NO[3]^-{}",
  `1` = "sqrt(x,y)"
)

# use `scriptstyle` to reduce the size of the parentheses &
# `bgroup` to make adding `)` possible 
cyl_names <- c(
  `4` = 'scriptstyle(bgroup("", a, ")"))~T~-~5*"%"',
  `6` = 'scriptstyle(bgroup("", b, ")"))~T~+~10~degree*C',
  `8` = 'scriptstyle(bgroup("", c, ")"))~T~+~30*"%"'
)

ggplot(mtcars, aes(wt, mpg)) + 
  geom_jitter() +
  facet_grid(am ~ cyl,
             labeller = labeller(am  = as_labeller(am_names,  label_parsed),
                                 cyl = as_labeller(cyl_names, label_parsed))
             ) +
  geom_text(x = 4, y = 25, size = 4, nudge_y = 1,
            parse = TRUE, check_overlap = TRUE,
            label = as.character(expression(paste("Log"["10"], bgroup("(", frac("x", "y"), ")")))))

### OR create new variables then assign labels directly
# reverse facet orders just for fun
mtcars <- mtcars %>% 
  mutate(am2  = factor(am,  labels = am_names),
         cyl2 = factor(cyl, labels = rev(cyl_names), levels = rev(attr(cyl_names, "names")))
  )

ggplot(mtcars, aes(wt, mpg)) + 
  geom_jitter() +
  facet_grid(am2 ~ cyl2,
             labeller = label_parsed) +
  annotate("text", x = 4, y = 30, size = 5,
           parse = TRUE, 
           label = as.character(expression(paste("speed [", m * s^{-1}, "]"))))

2019-03-30 তারিখে ডিপেক্স প্যাকেজ (v0.2.1.9000) দ্বারা তৈরি



3

আমি মনে করি এটির জন্য অন্যান্য সমস্ত সমাধান সত্যই সহায়ক। তবে এর বাইরে আরও একটি উপায় রয়েছে।

আমি অনুমান করি:

  • আপনি dplyrপ্যাকেজটি ইনস্টল করেছেন, এতে সুবিধাজনক mutateকমান্ড রয়েছে এবং
  • আপনার ডেটাসেটের নাম দেওয়া হয়েছে survey

    সার্ভে%>% পরিবর্তন

এই কমান্ডটি আপনাকে কলামগুলির নাম পরিবর্তন করতে সহায়তা করে, তবুও অন্যান্য সমস্ত কলামগুলি রাখা হয়।

তাহলে একই কাজ করুন facet_wrap, আপনি এখন ভাল আছেন।


দুঃখিত, এটি কাজ করে না কারণ এটি কলামের সামগ্রী পরিবর্তন করে
জেনস

3

variable, valueযুক্তি হিসাবে লেবেলারের ফাংশন সংজ্ঞা আমার পক্ষে কাজ করবে না। এছাড়াও আপনি যদি এক্সপ্রেশনটি ব্যবহার করতে চান তবে আপনাকে ল্যাপলি ব্যবহার করতে হবে এবং সহজভাবে ব্যবহার করতে পারবেন না arr[val], কারণ ফাংশনের যুক্তিটি একটি ডেটা.ফ্রেম।

এই কোডটি কাজ করেছে:

libary(latex2exp)
library(ggplot2)
arr <- list('virginica'=TeX("x_1"), "versicolor"=TeX("x_2"), "setosa"=TeX("x_3"))
mylabel <- function(val) { return(lapply(val, function(x) arr[x])) }
ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + geom_line() + facet_wrap(~Species, labeller=mylabel)

3

যেহেতু আমাকে এখনও পোস্টগুলিতে মন্তব্য করার অনুমতি নেই, তাই আমি ভিন্সের উত্তর এবং ছেলের520804 এর উত্তরের সংযোজন হিসাবে আলাদাভাবে পোস্ট করছি । ক্রেডিট তাদের যায়।

Son520804:

আইরিস ডেটা ব্যবহার করে:

আমি ধরে নিই:
আপনি dplyr প্যাকেজটি ইনস্টল করেছেন, এতে সুবিধাজনক মিউটেট কমান্ড রয়েছে এবং আপনার ডেটাসেটটির নাম জরিপ করা হয়েছে। survey %>% mutate(Hosp1 = Hospital1, Hosp2 = Hospital2,........) এই কমান্ডটি আপনাকে কলামগুলির নাম পরিবর্তন করতে সহায়তা করে, তবুও অন্যান্য সমস্ত কলামগুলি রাখা হয়। তারপরে একই ফেস_আর্যাপ করুন, এখন আপনি ভাল আছেন।

ভিন্সের আইরিস উদাহরণ এবং পুত্রের20204 এর আংশিক কোড ব্যবহার করে, আমি এই পরিবর্তনটি ফাংশন দিয়ে করেছি এবং মূল ডেটাসেটটি স্পর্শ না করেই একটি সহজ সমাধান অর্জন করেছি। কৌশলটি হ'ল নাম স্থায়ী ভেক্টর তৈরি করা এবং পাইপের অভ্যন্তরে সাময়িকভাবে নামগুলির সংশোধন করতে পাইপের অভ্যন্তরে মিউটেট () ব্যবহার করা:

i <- iris

levels(i$Species)
[1] "setosa"     "versicolor" "virginica"

new_names <- c(
  rep("Bristle-pointed iris", 50), 
  rep("Poison flag iris",50), 
  rep("Virginia iris", 50))

i %>% mutate(Species=new_names) %>% 
ggplot(aes(Petal.Length))+
    stat_bin()+
    facet_grid(Species ~ .)

এই উদাহরণে আপনি i i এর স্তরগুলি দেখতে পাচ্ছেন প্রজাতিগুলি অস্থায়ীভাবে নতুন_নামের ভেক্টরে অন্তর্ভুক্ত সাধারণ নামগুলিতে পরিবর্তিত হয়। লাইন রয়েছে

mutate(Species=new_names) %>%

আসল নামকরণটি প্রকাশ করতে সহজেই মুছে ফেলা যায়।

সাবধানতার কথা: নতুন নাম ভেক্টরটি সঠিকভাবে সেট আপ না করা থাকলে এটি সহজেই নামগুলিতে ত্রুটিগুলি প্রবর্তন করতে পারে। পরিবর্তনশীল স্ট্রিংগুলি প্রতিস্থাপনের জন্য পৃথক ফাংশন ব্যবহার করা সম্ভবত এটি অনেক বেশি ক্লিনার হবে। মনে রাখবেন যে নতুন নাম ভেক্টরটি আপনার মূল ডেটাসেটের ক্রমটি মেলানোর জন্য বিভিন্ন উপায়ে পুনরাবৃত্তি করতে পারে। দ্বিগুণ - এবং - ট্রিপল চেক করুন যে এটি সঠিকভাবে অর্জিত হয়েছে।


এটি ব্যবহার করতে কিছুটা ভাল লাগতে পারে: new_names <- c('setosa' = 'Bristle-pointed iris', 'versicolor' = 'Poison flag iris', 'virginica' = 'Virginia iris')এবং তারপরে পরিবর্তনতে আপনি এইভাবে একটি নতুন কলাম তৈরি করতে পারেন:mutate(Spec = new_names[Species])
ফাইলআপস 21

3

এটা আমার জন্য কাজ করছে।

একটি ফ্যাক্টর সংজ্ঞায়িত করুন:

hospitals.factor<- factor( c("H0","H1","H2") )

এবং ব্যবহার করুন ggplot():

facet_grid( hospitals.factor[hospital] ~ . )

2

কেবল নট 101 এর উত্তর প্রসারিত করা - ক্রেডিট তার কাছে যায়

plot_labeller <- function(variable,value, facetVar1='<name-of-1st-facetting-var>', var1NamesMapping=<pass-list-of-name-mappings-here>, facetVar2='', var2NamesMapping=list() )
{
  #print (variable)
  #print (value)
  if (variable==facetVar1) 
    {
      value <- as.character(value)
      return(var1NamesMapping[value])
    } 
  else if (variable==facetVar2) 
    {
      value <- as.character(value)
      return(var2NamesMapping[value])
    } 
  else 
    {
      return(as.character(value))
    }
}

আপনাকে যা করতে হবে তা হল নাম থেকে নাম ম্যাপিংয়ের সাথে একটি তালিকা তৈরি করা

clusteringDistance_names <- list(
  '100'="100",
  '200'="200",
  '300'="300",
  '400'="400",
  '600'="500"
)

এবং plot_labeller()নতুন ডিফল্ট আর্গুমেন্টগুলির সাথে নতুন সংজ্ঞা দিন:

plot_labeller <- function(variable,value, facetVar1='clusteringDistance', var1NamesMapping=clusteringDistance_names, facetVar2='', var1NamesMapping=list() )

এবং তারপর:

ggplot() + 
  facet_grid(clusteringDistance ~ . , labeller=plot_labeller) 

বিকল্পভাবে আপনি যে লেবেল পরিবর্তন করতে চান তার জন্য একটি উত্সর্গীকৃত ফাংশন তৈরি করতে পারেন।


2

অন্তর্নিহিত ডেটা পরিবর্তন না করে একই লক্ষ্য অর্জনের আমার কাছে অন্য উপায় রয়েছে:

ggplot(transform(survey, survey = factor(survey,
        labels = c("Hosp 1", "Hosp 2", "Hosp 3", "Hosp 4"))), aes(x = age)) +
  stat_bin(aes(n = nrow(h3),y=..count../n), binwidth = 10) +
  scale_y_continuous(formatter = "percent", breaks = c(0, 0.1, 0.2)) +
  facet_grid(hospital ~ .) +
  opts(panel.background = theme_blank())

আমি উপরে যা করেছি তা হ'ল মূল ডেটা ফ্রেমের ফ্যাক্টরের লেবেল পরিবর্তন করা এবং এটিই আপনার মূল কোডের সাথে তুলনা করে difference


1

আপনি কি আপনার Hospitalভেক্টরের নির্দিষ্ট স্তরগুলি পরিবর্তন করার চেষ্টা করেছেন ?

levels(survey$hospital)[levels(survey$hospital) == "Hospital #1"] <- "Hosp 1"
levels(survey$hospital)[levels(survey$hospital) == "Hospital #2"] <- "Hosp 2"
levels(survey$hospital)[levels(survey$hospital) == "Hospital #3"] <- "Hosp 3"

1

আমার মনে হচ্ছে আমার এই বিষয়ে আমার উত্তর যুক্ত করা উচিত কারণ এই কাজটি করতে আমার বেশ সময় লেগেছে:

এই উত্তরটি আপনার পক্ষে যদি:

  • আপনি আপনার মূল তথ্যটি সম্পাদনা করতে চান না
  • আপনার লেবেলগুলিতে এবং ( ) প্রকাশের প্রয়োজন হলেbquote
  • যদি আপনি একটি পৃথক লেবেলিং নাম-ভেক্টরের নমনীয়তা চান

আমি মূলত লেবেলগুলিকে একটি নামযুক্ত ভেক্টরে রাখি যাতে লেবেল গুলিয়ে না যায় বা স্যুইচ না হয়। labellerঅভিব্যক্তি সম্ভবত সহজ হতে পারে, কিন্তু এই অন্তত কাজ দিকে (উন্নতি খুব স্বাগত জানাই)। ফ্যাক্ট-ফ্যাক্টরটি সুরক্ষিত করতে `(পিছনে উদ্ধৃতি) নোট করুন।

n <- 10
x <- seq(0, 300, length.out = n)

# I have my data in a "long" format
my_data <- data.frame(
  Type = as.factor(c(rep('dl/l', n), rep('alpha', n))),
  T = c(x, x),
  Value = c(x*0.1, sqrt(x))
)

# the label names as a named vector
type_names <- c(
  `nonsense` = "this is just here because it looks good",
  `dl/l` = Linear~Expansion~~Delta*L/L[Ref]~"="~"[%]", # bquote expression
  `alpha` = Linear~Expansion~Coefficient~~alpha~"="~"[1/K]"
  )


ggplot() + 
  geom_point(data = my_data, mapping = aes(T, Value)) + 
  facet_wrap(. ~ Type, scales="free_y", 
             labeller = label_bquote(.(as.expression(
               eval(parse(text = paste0('type_names', '$`', Type, '`')))
               )))) +
  labs(x="Temperature [K]", y="", colour = "") +
  theme(legend.position = 'none')

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


1

(থেকে সহজ সমাধান এখানে ):

p <- ggplot(mtcars, aes(disp, drat)) + geom_point()
# Example (old labels)
p + facet_wrap(~am)


to_string <- as_labeller(c(`0` = "Zero", `1` = "One"))
# Example (New labels)
p + facet_wrap(~am, labeller = to_string)

0

কিছুদিনের জন্য সংগ্রাম পর, আমি দেখেছি যে আমরা ব্যবহার করতে পারেন fct_relevel()এবং fct_recode()থেকে forcatsএকত্রে মতকে ক্রম পরিবর্তন পাশাপাশি পল লেবেল সমাধান করুন। এটি নকশা দ্বারা সমর্থিত কিনা তা আমি নিশ্চিত নই, তবে এটি কার্যকর! নীচের প্লটগুলি দেখুন:

library(tidyverse)

before <- mpg %>%
  ggplot(aes(displ, hwy)) + 
  geom_point() +
  facet_wrap(~class)
before

after <- mpg %>%
  ggplot(aes(displ, hwy)) + 
  geom_point() + 
  facet_wrap(
    vars(
      # Change factor level name
      fct_recode(class, "motorbike" = "2seater") %>% 
        # Change factor level order
        fct_relevel("compact")
    )
  )
after

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

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