R ggplot2翻转因子标签

R ggplot2翻转因子标签,r,ggplot2,R,Ggplot2,我还没讲到这个问题的实质。我有一个使用ggplot2的刻面条形图,正在寻找一种方法: 1) 使其显示我的调查问卷参与者未选择的类别(例如,如果从未选择类别5(“恐怖”),我仍然希望它显示在图表中(没有条形图),以显示完整的可能答案集,并使图表更易于阅读) 2) 我想翻转多面图中的Y轴,这样“伟大”在顶部,“可怕”在底部。有没有办法在不改变数据的情况下做到这一点 随信附上我目前拥有的一个完整、独立的迷你示例。我仍然是一个新手,所以如果你对如何缩短和简化这个问题有建议的话(我相信有很多可以减少),我

我还没讲到这个问题的实质。我有一个使用ggplot2的刻面条形图,正在寻找一种方法:

1) 使其显示我的调查问卷参与者未选择的类别(例如,如果从未选择类别5(“恐怖”),我仍然希望它显示在图表中(没有条形图),以显示完整的可能答案集,并使图表更易于阅读)

2) 我想翻转多面图中的Y轴,这样“伟大”在顶部,“可怕”在底部。有没有办法在不改变数据的情况下做到这一点

随信附上我目前拥有的一个完整、独立的迷你示例。我仍然是一个新手,所以如果你对如何缩短和简化这个问题有建议的话(我相信有很多可以减少),我很高兴听到你的建议

data.csv:

ONE;TWO;THREE;FOUR
1;1;2;1
1;2;3;2  
2;2;3;2
3;2;4;3
代码R

library(ggplot2)
library(scales)
df = read.csv2("data.csv", fileEncoding="UTF-8")

df[df=="0"]<-NA;
df[df=="1"]<-"Great";
df[df=="2"]<-"Good";
df[df=="3"]<-"OK";
df[df=="4"]<-"Not Good";
df[df=="5"]<-"Horrible";

# four entries
df$ID = c(1:4);
# turn to factors
df$ONE = factor(df$ONE, levels = c("NA", "Great", "Good", "OK", "Not Good", "Horrible"));
df$TWO = factor(df$TWO, levels = c("NA", "Great", "Good", "OK", "Not Good", "Horrible"));
df$THREE = factor(df$THREE, levels = c("NA", "Great", "Good", "OK", "Not Good", "Horrible"));
df$FOUR = factor(df$FOUR, levels = c("NA", "Great", "Good", "OK", "Not Good", "Horrible"));

df.molten <- melt(df, id.vars="ID");
df.molten$value <- factor( df.molten$value, levels = c("NA", "Great", "Good", "OK", "Not Good", "Horrible") );

ggplot( df.molten , aes( x = value, fill=value )  ) + 
  geom_bar(aes(y = (..count..)/8)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, face=2), 
        legend.position="none", 
        axis.text= element_text(size=12), 
        axis.title=element_text(size=14,face="bold"), 
        panel.background = element_rect(fill = "white")) +
  scale_fill_manual(values=c("blue4","steelblue2", "blue4","steelblue2", "blue4")) +
  facet_wrap( "variable" ) + 
  scale_y_continuous(breaks=seq(0, 1, 0.1), labels = percent_format()) + 
  xlab("") +  
  ylab("") + 
  coord_flip();
库(ggplot2)
图书馆(比例尺)
df=read.csv2(“data.csv”,fileEncoding=“UTF-8”)
df[df==“0”]添加
scale\u x\u离散(drop=FALSE)
以保持空因子水平。为了在不改变原始数据帧的情况下颠倒因子水平的顺序,我在调用
ggplot
中进行了更改。我还对代码做了一些其他调整。而且,你不需要所有的分号

library(ggplot2)
library(scales)
library(reshape2)  # For melt function
library(dplyr)     # For chaining (%>%) operator

df = read.csv2("data.csv", fileEncoding="UTF-8")

df[df=="0"]<-NA;      # Removed quotes from NA 
df[df=="1"]<-"Great";
df[df=="2"]<-"Good";
df[df=="3"]<-"OK";
df[df=="4"]<-"Not Good";
df[df=="5"]<-"Horrible";

# four entries
df$ID = c(1:4);

df.molten <- melt(df, id.vars="ID");

# Only need to set factor levels once. No need for the other four calls to factor in 
# the original code. Also, I removed the "NA" level.
df.molten$value <- factor(df.molten$value, levels = c("Great", "Good", "OK", "Not Good", "Horrible"));

# First line reverses factor levels
ggplot(df.molten %>% mutate(value=factor(value, levels=rev(levels(value)))), 
        aes(x = value, fill=value)) + 
  geom_bar(aes(y = (..count..)/8)) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, face=2), 
        legend.position="none", 
        axis.text= element_text(size=12), 
        axis.title=element_text(size=14,face="bold"), 
        panel.background = element_rect(fill = "white")) +
  scale_fill_manual(values=c("blue4","steelblue2", "blue4","steelblue2", "blue4")) +
  facet_wrap( "variable" ) + 
  scale_y_continuous(breaks=seq(0, 1, 0.1), labels = percent_format()) + 
  scale_x_discrete(drop=FALSE) +   # To keep empty factor levels
  labs(x="", y="") +               # Just to be more concise
  coord_flip()
库(ggplot2)
图书馆(比例尺)
库(重塑2)#用于熔化功能
库(dplyr)#用于链接(%>%)运算符
df=read.csv2(“data.csv”,fileEncoding=“UTF-8”)

df[df==“0”]
df[df==“4”]已更正。谢谢尽管如此,问题依然存在添加
scale\u x\u discrete(drop=FALSE)
以保持空因子水平。