r - R在轴线处打破线型规则
问题描述
我正在尝试根据我的数据框中名为 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 列是离散的。
为了完整起见,这里是我正在使用的数据:
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()
此外,您可以缩短代码如下:
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)"))
如果您要在 each 中使用相同的数据框geom
,您可以将数据框放在对 ggplot 的主调用中,而不是在每个 geom 中重复它。同样,适用于所有几何图形的美学映射(里面的东西aes
)也可以放在主 ggplot 调用中,而不是在每个几何图形中重复它们。唯一需要geom_point
单独进行的映射是size=TB
因为您不希望线宽针对不同级别的TB
.
推荐阅读
- nginx - Nginx 使用子域访问我的网站会下载文件
- listview - 如何在 Flutter 中使用 StatelessWidget 和提供程序以编程方式滚动 ListView?
- react-native - 试图安装博览会
- laravel - Laravel 7.x 刀片 {!! !}} 转义了问号符号 (?) 虽然它不包含在 php htmlspecialchars 中
- javascript - 在JS中循环构造函数不起作用
- mysql - 从 Azure Database for MYSQL 复制到 VM MYSQL 中的 Mysql 数据
- javascript - express mongodb查找查询结果空数组
- python - Selenuim:返回 NoSuchElementException:消息:在 Safari 上的机器人框架中使用关键字时
- java - Java :: 比较 ronded 双打不起作用
- javascript - 承诺中的内存泄漏