R在轴线处打破线型规则

标签 r ggplot2

我正在尝试根据数据框中名为 TB 的列使用不同的线型绘制 2 个变量。下面显示的是我使用的代码:

q=ggplot()+geom_line(aes(deg_b,glim_f,colour=state,linetype=TB),min_splits_mp)+
  scale_linetype_manual(values=c(1,4))+
  geom_point(data = min_splits_mp, mapping = aes(x = deg_b, y = glim_f,colour=state, shape=TB,size=TB)) +
  scale_shape_manual(values=c(0,4))+
  scale_size_manual(values=c(3,4))+
  scale_color_manual(values=c("blue","red"))+
  ggtitle(paste(domain," Degredation vs best_split(Both tiebreaks)")) 
print(q)

TB 列是离散的。

当我运行这段代码时,绘制了以下内容: enter image description here

为完整起见,这里是我使用的数据:

      State         deg_b  glim_F   TB
1   7,5,9,2,1,3,6,0,8,4 0   3   Average case
2   6,2,4,8,3,0,5,9,1,7 0   9   Average case
3   6,2,4,8,3,0,5,9,1,7 0   10  Average case
4   6,2,4,8,3,0,5,9,1,7 0   9   Average case
5   6,2,4,8,3,0,5,9,1,7 0   10  Average case
6   7,5,9,2,1,3,6,0,8,4 1   5   Average case
7   6,2,4,8,3,0,5,9,1,7 1   5   Average case
8   7,5,9,2,1,3,6,0,8,4 2   5   Average case
9   6,2,4,8,3,0,5,9,1,7 2   5   Average case
10  7,5,9,2,1,3,6,0,8,4 3   5   Average case
11  6,2,4,8,3,0,5,9,1,7 3   5   Average case
12  7,5,9,2,1,3,6,0,8,4 0   9   Best TB
13  7,5,9,2,1,3,6,0,8,4 0   10  Best TB
14  7,5,9,2,1,3,6,0,8,4 0   8   Best TB
15  7,5,9,2,1,3,6,0,8,4 0   9   Best TB
16  7,5,9,2,1,3,6,0,8,4 0   10  Best TB
17  6,2,4,8,3,0,5,9,1,7 0   0   Best TB
18  6,2,4,8,3,0,5,9,1,7 0   1   Best TB
19  6,2,4,8,3,0,5,9,1,7 0   2   Best TB
20  6,2,4,8,3,0,5,9,1,7 0   3   Best TB
21  6,2,4,8,3,0,5,9,1,7 0   4   Best TB
22  6,2,4,8,3,0,5,9,1,7 0   5   Best TB
23  6,2,4,8,3,0,5,9,1,7 0   6   Best TB
24  6,2,4,8,3,0,5,9,1,7 0   7   Best TB
25  6,2,4,8,3,0,5,9,1,7 0   8   Best TB
26  6,2,4,8,3,0,5,9,1,7 0   9   Best TB
27  6,2,4,8,3,0,5,9,1,7 0   10  Best TB
28  6,2,4,8,3,0,5,9,1,7 0   0   Best TB
29  6,2,4,8,3,0,5,9,1,7 0   1   Best TB
30  6,2,4,8,3,0,5,9,1,7 0   2   Best TB
31  6,2,4,8,3,0,5,9,1,7 0   3   Best TB
32  6,2,4,8,3,0,5,9,1,7 0   4   Best TB
33  6,2,4,8,3,0,5,9,1,7 0   5   Best TB
34  6,2,4,8,3,0,5,9,1,7 0   6   Best TB
35  6,2,4,8,3,0,5,9,1,7 0   7   Best TB
36  6,2,4,8,3,0,5,9,1,7 0   8   Best TB
37  6,2,4,8,3,0,5,9,1,7 0   9   Best TB
38  6,2,4,8,3,0,5,9,1,7 0   10  Best TB
39  7,5,9,2,1,3,6,0,8,4 1   5   Best TB
40  7,5,9,2,1,3,6,0,8,4 1   4   Best TB
41  6,2,4,8,3,0,5,9,1,7 1   6   Best TB
42  6,2,4,8,3,0,5,9,1,7 1   5   Best TB
43  7,5,9,2,1,3,6,0,8,4 2   6   Best TB
44  7,5,9,2,1,3,6,0,8,4 2   5   Best TB
45  6,2,4,8,3,0,5,9,1,7 2   6   Best TB
46  6,2,4,8,3,0,5,9,1,7 2   5   Best TB
47  7,5,9,2,1,3,6,0,8,4 3   6   Best TB
48  7,5,9,2,1,3,6,0,8,4 3   5   Best TB
49  6,2,4,8,3,0,5,9,1,7 3   5   Best TB
50  6,2,4,8,3,0,5,9,1,7 3   4   Best TB

请注意,最好的 TB 应该在点之间有一条虚线(例如,风琴圈中的线)。然而奇怪的是,在 deg_b=0 时情况并非如此,其中蓝色 X 之间的线是一条未断开的虚线(见黑色圆圈)。为什么是这样?

最佳答案

如果没有看到你的数据很难确定,但我猜 deg_b=0 处的垂直蓝线是重叠绘制两条或多条线的结果,这些线相对于每条线略有偏移(沿着线的方向)其他,创建破折号的外观,其中每条过度绘制的线单独是点划线。

例如,请注意下图中下方的部分线看起来是虚线,即使两条单独的重绘线是点划线:

d = data.frame(x = c(1, 5, 1, 4, 2, 6),
               y = c(1, 5, 2, 5, 2, 6),
               lt = rep(c("A","B","A"), each=2),
               group = rep(c("a","b","c"), each=2))

ggplot(d, aes(x, y, linetype=lt, group=group)) + 
  geom_line(size=0.5) +
  scale_linetype_manual(values=c(4,1)) + 
  theme_classic()

enter image description here

此外,您还可以缩短代码如下:

ggplot(min_splits_mp, aes(deg_b, glim_f, colour=state, linetype=TB)) +
  geom_line()+
  geom_point(aes(shape=TB, size=TB)) +
  scale_linetype_manual(values=c(1,4)) +
  scale_shape_manual(values=c(0,4)) +
  scale_size_manual(values=c(3,4)) +
  scale_color_manual(values=c("blue","red"))+
  ggtitle(paste(domain," Degredation vs best_split(Both tiebreaks)")) 

如果您打算在每个 geom 中使用相同的数据框,您可以将数据框放在对 ggplot 的主调用中,而不是在每个 geom 中重复它。同样,适用于所有 geom 的美学映射(aes 中的内容)也可以放在主 ggplot 调用中,而不是在每个 geom 中重复它们。唯一需要在 geom_point 中的映射是 size=TB,因为您不希望线宽因 TB 的不同级别而改变>.

关于R在轴线处打破线型规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58405971/

相关文章:

r - 抓取需要点击按钮的网站

r - readLines可以在R中并行执行吗

r - 气泡图,唯一的指标是大小和颜色

r - 将 geom_vline 添加到 ggplot2 时遇到问题

r - 如何通过点是否在多边形内来标记点

r - 对齐 ggplot choropleth 的边缘(图例标题各不相同)

r - 使用 `:=` 语法以编程方式生成要分配给 data.table 的列列表

R:如何向 ggplot 中的分箱箱线图添加对角线

r - ggplot2 用颜色非线性调整比例

R 绘图 : customize point attributes