数据点可以在条形图中标记吗?

时间:2015-12-03 12:28:38

标签: r graph plot label stripchart

我无法在stripchart中找到标记数据点的方法。使用text函数(如question中所述)会在点堆叠或抖动时发生故障。

我有4个类别(第2-5列)的数字数据,并希望用首字母(第1列)标记每个数据点。

这是我的数据和我尝试过的代码:

initials,total,interest,slides,presentation
CU,1.6,1.7,1.5,1.6
DS,1.6,1.7,1.5,1.7
VA,1.7,1.5,1.5,2.1
MB,2.3,2.0,2.1,2.9
HS,1.2,1.3,1.4,1.0
LS,1.8,1.8,1.5,2.0

stripchart(CTscores[-1], method = "stack", las = 1)
text(CTscores$total + 0.05, 1, labels = CTscores$name, cex = 0.5)

下面的情节是我迄今为止管理得最好的。如您所见,数据点标签重叠。此外,最长的y标签被切断。

enter image description here

可以在带状图中标记点吗?或者我是否必须使用另一个命令显示它以允许标记?

2 个答案:

答案 0 :(得分:3)

如何将标签用作点标记,而不是使用单独的标签?这是使用ggplot2而不是基本图形的示例。

为了避免重叠,我们直接设置重复值的垂直偏移量,而不是将其留给随机抖动。为此,我们需要分配数值y值(以便我们可以添加偏移量),然后用适当的文本标签替换数字轴标签。

library(ggplot2)
library(reshape2)
library(dplyr)

# Convert data from "wide" to "long" format
CTscores.m = melt(CTscores, id.var="initials")

# Create an offset that we'll use for vertically separating the repeated values
CTscores.m = CTscores.m %>% group_by(variable, value) %>%
  mutate(repeats = ifelse(n()>1, 1,0),
         offset = ifelse(repeats==0, 0, seq(-n()/25, n()/25, length.out=n())))

ggplot(CTscores.m, aes(label=initials, x=value, y=as.numeric(variable) + offset,
                       color=initials)) +
  geom_text() +
  scale_y_continuous(labels=sort(unique(CTscores.m$variable))) +
  theme_bw(base_size=15) +
  labs(y="", x="") +
  guides(color=FALSE)

enter image description here

为了完整性,以下是如何使用重复值的抖动创建图形,而不是使用特定的偏移量:

# Convert data from "wide" to "long" format
CTscores.m = melt(CTscores, id.var="initials")

# Mark repeated values (so we can selectively jitter them later)
CTscores.m = CTscores.m %>% group_by(variable, value) %>%
  mutate(repeats = ifelse(n()>1, 1,0))

# Jitter only the points with repeated values
set.seed(13)
ggplot() +
  geom_text(data=CTscores.m[CTscores.m$repeats==1,], 
            aes(label=initials, x=value, y=variable, color=initials),
            position=position_jitter(height=0.25, width=0)) +
  geom_text(data=CTscores.m[CTscores.m$repeats==0,], 
            aes(label=initials, x=value, y=variable, color=initials)) +
  theme_bw(base_size=15) +
  guides(color=FALSE)

enter image description here

答案 1 :(得分:-1)

这是一个替代方案,允许您为条形图添加颜色以识别首字母:

onChange

enter image description here