我有一个数据框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
Run Code Online (Sandbox Code Playgroud)
我想使用这个数据框来绘制使用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")
Run Code Online (Sandbox Code Playgroud)
非常感谢所有可以帮助我的人.
艾萨克
你的意思是这样的吗?(我不确定你是否想在图表上添加值,所以我添加了它们,但如果你不需要它们,你可以安全地删除最后一行.)
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")
Run Code Online (Sandbox Code Playgroud)

+ coord_flip()IMO 可以更好地添加它.
你的代码有什么问题?
该ggplot()函数期望data.frame,它可以从中提取命名变量,例如美学参数x=和y=.因此,首先,您需要将对象转换为正确的data.frame并将其命名,因为它可以通过aes()以下方式实现其值:
toplot_noind <- as.data.frame(toplot_noind)
names(toplot_noind) <- y
Run Code Online (Sandbox Code Playgroud)
使用与data.frame相同的名称更好.(但请注意,它将使用强制转换操作继承其名称.)
然后,x和y标签必须在aes()函数之外.我不使用,qplot()但我认为在那里使用xlab=和ylab=工作正常.有了ggplot,我更喜欢labs()or xlab()/ ylab()functions.例如
你需要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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5346 次 |
| 最近记录: |