轴上的R折线类型规则

问题描述 投票:2回答:1

我正在尝试基于数据框中称为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

请注意,最佳TB应该在点之间具有虚线(例如,组织圆中的线)。但是奇怪的是,在deg_b = 0时情况并非如此,其中蓝色X之间的线是不间断的虚线(请参见黑色圆圈)。为什么是这样?

r ggplot2
1个回答
0
投票

很难确定是否没有看到您的数据,但是我想知道deg_b = 0处的垂直蓝线是否是重复绘制两条或多条相对彼此略有偏移的线的结果,从而在其中出现破折号每个单独绘制的线都点划线。

例如,请注意下图中下部线条的一部分看起来是虚线,即使两条单独的过度绘制的点都用点划线表示:

d = data.frame(x = c(1, 5, 1, 4, 1.3, 4.3),
               y = c(1, 5, 2, 5, 1.3, 4.3),
               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中重复它。同样,也可以将适用于所有几何的美学映射(aes中的内容)放入主ggplot调用中,而不是在每个几何中重复它们。唯一需要在geom_point中的唯一映射是size=TB,因为您不希望线宽针对TB的不同级别进行更改。

© www.soinside.com 2019 - 2024. All rights reserved.