我有一个名为toplot_noind
的数据框,如下所示。
> toplot_noind
Chang.1 Chang.2 Chang.3 Chang.4 Chang.5 Chang.6 Chang.7 Chang.8
18 150.3 84.61 31.45 11.08 -0.19 -57.83 -88.63 -98.39
我想使用此数据框使用ggplot2绘制条形图。
我不需要列名:Chang.1,Chang.2等,在图中。
我希望这些8个值150.3,84.61,..., - 98.39出现在y轴上(18不是值的一部分,它是行的名称)。
此外,由于有8个值,我想在x轴上有8个条形 - 每个条形指向这些值。
因此,我想在x轴上将这些条形命名为1(对于第1条),2(对于第2条),3,...,8依次命名。
另外,我想将y轴标记为“总预期利润”,将x轴标记为“溢价变化”。
下面显示的是我尝试过的但它不起作用。实际上我已经尝试过阅读ggplot2,但我读到的材料无法让我理解,但我需要在我的作业中使用这个条形图。我的提交时间非常有限。
library(reshape)
library(ggplot2)
t<-ncol(toplot_noind)
a<-seq(1:t)
ggplot(toplot_noind, aes(x = a, y = toplot_noind, xlab="premium change", ylab="Total Expected Profit")) +
geom_bar(position = "dodge")
非常感谢所有可以帮助我的人。
艾萨克
答案 0 :(得分:9)
tmp <- c(150.3,84.61,31.45,11.08,-0.19,-57.83,-88.63,-98.39)
dd <- data.frame(y=tmp, x=LETTERS[1:8])
ggplot(dd, aes(x=x, y=y)) + geom_bar(fill="darkgrey") +
labs(x="Premium change", y="Total Expected Profit") +
geom_text(aes(x=x, y=ifelse(y>0, y+5, y-5),
label=y), size=4, colour="white")
添加+ coord_flip()
,IMO会更好。
您的代码有什么问题?
ggplot()
函数需要一个data.frame,它可以从中提取命名变量,例如对于美学参数x=
和y=
。因此,首先,您需要将对象转换为正确的data.frame并为其命名,因为它可以通过aes()
来实现它的价值:
toplot_noind <- as.data.frame(toplot_noind)
names(toplot_noind) <- y
使用与data.frame相同的名称更好。 (但请注意,它将使用强制转换操作继承其名称。)
然后,x和y标签必须在aes()
函数之外。我不使用qplot()
,但我认为使用xlab=
和ylab=
可以正常使用。使用ggplot
,我更喜欢labs()
或xlab()
/ ylab()
函数。 E.g。
您需要将x
表示为一个因素。
此处似乎没有必要使用闪避方面,因为您没有第二个交叉分类因子(请参阅help(position_dodge)
中的使用示例)。
总而言之,您更正的代码如下:
toplot_noind <- as.data.frame(toplot_noind)
ggplot(toplot_noind, aes(x = as.factor(1:8), y = toplot_noind)) +
geom_bar() +
xlab("premium change") +
ylab("Total Expected Profit")