0

我有一个小数据框 DF,它由两列 X=Type,Y=Cost 组成。想要为每种类型绘制一个条形图及其成本。我已经设法做到了,但是,我正在寻求在 barplot 中更好的演示。我认为三个问题可以满足我的要求:

1) 由于每种类型的 X 轴文本都很长,因此我将它们设为 45 度。我试过缩写,它不可读!

2)而不是颜色,我试图在ggplot中使用填充图案/纹理,但Hadl​​ey证明这是不可能的:填充图案

在黑白打印的情况下,有什么方法可以使绘图可读吗?

3)我想知道是否有一种方法可以专注于“类型”类别之一,即使其粗体和特殊颜色来吸引这种特殊类型的注意力。例如,我想让“其他”结果看起来与其他结果不同。

我尝试了我的想法,但是,我完全愿意重新设计图表。有什么建议么

这是数据-我使用了 dput 命令:

structure(list(Type = structure(c(6L, 8L, 7L, 9L, 10L, 15L, 11L, 
17L, 3L, 16L, 5L, 19L, 4L, 14L, 2L, 18L, 13L, 1L, 12L), .Label = c("Backup Hardware ", 
"data or network control", "Email exchange server/policy", "Instant messaging control", 
"Login/system administrators/privilage", "Machine A", "Machine A with Software and   Camera", 
 "Machine A without Software", "Machine B", "Machine B without RAM and CD ROM", 
"Managment analyses software ", "Other", "Password and security", 
"public web application availability", "Software for backup", 
"System access by employees ", "Telecom and Harware", "Web site update", 
"wireless network access ponits"), class = "factor"), Cost = structure(c(4L, 
3L, 15L, 13L, 11L, 7L, 2L, 1L, 19L, 16L, 14L, 12L, 10L, 9L, 8L, 
6L, 5L, 17L, 18L), .Label = c("$1,292,312", "$1,888,810", "$11,117,200", 
"$14,391,580", "$161,210", "$182,500", "$2,145,900", "$250,000", 
"$270,500", "$298,810", "$3,452,010", "$449,001", "$6,034,000", 
"$621,710", "$7,642,660", "$700,000", "$85,100", "$885,000", 
"$923,700"), class = "factor")), .Names = c("Type", "Cost"), class = "data.frame",   row.names = c(NA, 
-19L))

这是我在 R 中的代码:

p<- ggplot(data = DF, aes(x=Type, y=Cost)) + 
 geom_bar(aes(fill=Type),stat="identity") + 
 geom_line()+
scale_x_discrete (name="Type")+
scale_y_discrete(name="Cost")+
theme(axis.text.x = element_text(colour="black",size=11,face="bold")) +
theme(axis.text.x = element_text(angle = 45, hjust = 1))+
labs(fill=expression(paste("Type of study\n")))

print(p)
4

1 回答 1

4

以下是您的情节的一些起点:

1)首先,将变量Cost从因子转换为数值并命名Cost2

DF$Cost2<-as.numeric(gsub("[^0-9]", "",DF$Cost))

2)使用 - 将您的情节转换为灰度scale_fill_manual()- 这里所有条形都是灰色的,除了条形Other是黑色的。将scale_y_continuous()y 轴值再次作为美元使用labels=dollar(为此,您需要添加 library scales)。要使Otherx 轴的标签加粗而其他正常,您应该face=在内部theme() axis.text.x=提供与级别数相同长度的向量的参数 - 1 表示所有级别,2 表示级别Other

library(scales)
ggplot(data = DF, aes(x=Type, y=Cost2)) + 
  geom_bar(aes(fill=Type),stat="identity",show_guide=FALSE) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1,
                                   face=(as.numeric(levels(DF$Type)=="Other") + 1)))+
  scale_y_continuous(labels=dollar)+
  scale_fill_manual(values=c("grey43","black")[as.numeric(levels(DF$Type)=="Other")+1])

在此处输入图像描述

于 2013-11-12T18:41:00.287 回答