使用R调整多组图的形状和x轴

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

我试图让所有的线条都有不同的形状,但现在它显示

The shape palette can deal with a maximum of 6 discrete values because more than 6 becomes difficult to discriminate ℹ you have requested 7 values. Consider specifying shapes manually if you need that many have them.
我试图添加
scale_shape_manual(breaks = 6:12, values = 6:12, name = "group")
,但它什么也没做,只是让点消失。另外,现在图例中的对象的顺序很奇怪。应该如何使它们按照从 Obj_6 到 Obj_12 的正确顺序?

我也想让x轴显示每个幂,但它只显示0.5和1.0之类的值,而不是我需要的值,即

c(0,0.25,0.33,0.35,0.375,0.4,0.425,0.45,0.475,0.5,0.525,0.55,0.575,0.6,0.7,0.8,0.9,1,1.1,1.2,1.3)
,我不知道该怎么做。横放会很挤,能不能竖着放?

数据框

graph_data_long

structure(list(obj_name = c("Obj_6", "Obj_6", "Obj_6", "Obj_6", 
"Obj_6", "Obj_6", "Obj_6", "Obj_6", "Obj_6", "Obj_6", "Obj_6", 
"Obj_6", "Obj_6", "Obj_6", "Obj_6", "Obj_6", "Obj_6", "Obj_6", 
"Obj_6", "Obj_6", "Obj_6", "Obj_7", "Obj_7", "Obj_7", "Obj_7", 
"Obj_7", "Obj_7", "Obj_7", "Obj_7", "Obj_7", "Obj_7", "Obj_7", 
"Obj_7", "Obj_7", "Obj_7", "Obj_7", "Obj_7", "Obj_7", "Obj_7", 
"Obj_7", "Obj_7", "Obj_7", "Obj_8", "Obj_8", "Obj_8", "Obj_8", 
"Obj_8", "Obj_8", "Obj_8", "Obj_8", "Obj_8", "Obj_8", "Obj_8", 
"Obj_8", "Obj_8", "Obj_8", "Obj_8", "Obj_8", "Obj_8", "Obj_8", 
"Obj_8", "Obj_8", "Obj_8", "Obj_9", "Obj_9", "Obj_9", "Obj_9", 
"Obj_9", "Obj_9", "Obj_9", "Obj_9", "Obj_9", "Obj_9", "Obj_9", 
"Obj_9", "Obj_9", "Obj_9", "Obj_9", "Obj_9", "Obj_9", "Obj_9", 
"Obj_9", "Obj_9", "Obj_9", "Obj_10", "Obj_10", "Obj_10", "Obj_10", 
"Obj_10", "Obj_10", "Obj_10", "Obj_10", "Obj_10", "Obj_10", "Obj_10", 
"Obj_10", "Obj_10", "Obj_10", "Obj_10", "Obj_10", "Obj_10", "Obj_10", 
"Obj_10", "Obj_10", "Obj_10", "Obj_11", "Obj_11", "Obj_11", "Obj_11", 
"Obj_11", "Obj_11", "Obj_11", "Obj_11", "Obj_11", "Obj_11", "Obj_11", 
"Obj_11", "Obj_11", "Obj_11", "Obj_11", "Obj_11", "Obj_11", "Obj_11", 
"Obj_11", "Obj_11", "Obj_11", "Obj_12", "Obj_12", "Obj_12", "Obj_12", 
"Obj_12", "Obj_12", "Obj_12", "Obj_12", "Obj_12", "Obj_12", "Obj_12", 
"Obj_12", "Obj_12", "Obj_12", "Obj_12", "Obj_12", "Obj_12", "Obj_12", 
"Obj_12", "Obj_12", "Obj_12"), power = c("0", "0.25", "0.33", 
"0.35", "0.375", "0.4", "0.425", "0.45", "0.475", "0.5", "0.525", 
"0.55", "0.575", "0.6", "0.7", "0.8", "0.9", "1", "1.1", "1.2", 
"1.3", "0", "0.25", "0.33", "0.35", "0.375", "0.4", "0.425", 
"0.45", "0.475", "0.5", "0.525", "0.55", "0.575", "0.6", "0.7", 
"0.8", "0.9", "1", "1.1", "1.2", "1.3", "0", "0.25", "0.33", 
"0.35", "0.375", "0.4", "0.425", "0.45", "0.475", "0.5", "0.525", 
"0.55", "0.575", "0.6", "0.7", "0.8", "0.9", "1", "1.1", "1.2", 
"1.3", "0", "0.25", "0.33", "0.35", "0.375", "0.4", "0.425", 
"0.45", "0.475", "0.5", "0.525", "0.55", "0.575", "0.6", "0.7", 
"0.8", "0.9", "1", "1.1", "1.2", "1.3", "0", "0.25", "0.33", 
"0.35", "0.375", "0.4", "0.425", "0.45", "0.475", "0.5", "0.525", 
"0.55", "0.575", "0.6", "0.7", "0.8", "0.9", "1", "1.1", "1.2", 
"1.3", "0", "0.25", "0.33", "0.35", "0.375", "0.4", "0.425", 
"0.45", "0.475", "0.5", "0.525", "0.55", "0.575", "0.6", "0.7", 
"0.8", "0.9", "1", "1.1", "1.2", "1.3", "0", "0.25", "0.33", 
"0.35", "0.375", "0.4", "0.425", "0.45", "0.475", "0.5", "0.525", 
"0.55", "0.575", "0.6", "0.7", "0.8", "0.9", "1", "1.1", "1.2", 
"1.3"), value = c(3.72410744566162, 5.51168003923104, 7.4060839154296, 
8.20393019709473, 9.24723797685855, 10.7562379662041, 12.8868025478135, 
15.5100727558972, 18.5534222223628, 23.1409478278656, 22.6504985586419, 
20.9065115341602, 19.4181576551116, 17.8554687886568, 10.8993991443694, 
7.81271135699668, 6.13966797266852, 5.6977077662796, 5.37408529874299, 
5.02962030371785, 4.86258697386329, 3.19737465216476, 5.59774993516746, 
7.50121965706743, 8.25167100160226, 9.03798643979528, 9.46022583168103, 
9.93268505520465, 10.4640129694759, 11.0615850694332, 13.19482999695, 
14.746170594877, 15.990014190891, 17.4551966969221, 17.9361361197718, 
7.99349308078362, 6.49960908806224, 5.84308526845936, 5.52762501102557, 
5.38280815735708, 4.91888518373503, 4.71444863014914, 3.07771847969777, 
5.47433228431448, 6.44213757389488, 6.66742430744288, 6.97535025689521, 
7.31701680907091, 7.70094772378251, 8.91690959596007, 10.6984857467849, 
11.925022990115, 11.142586680758, 10.1820818794844, 9.37740693193392, 
8.68294638919202, 7.48047503801594, 6.17035953638092, 5.8675475823089, 
5.42126227945987, 5.39176138127794, 4.86428358796829, 4.5258515829203, 
3.04646629915112, 4.54796886657372, 5.38135683525506, 5.64564288700107, 
6.08552141033587, 6.82143106487618, 7.77461891298966, 8.26190488706468, 
8.76033401364452, 9.32880000729427, 9.25312478347536, 9.12503690998079, 
9.00089994659873, 8.76811470531463, 6.62734982132179, 5.81577592377926, 
5.85559194097889, 5.36002906494716, 5.08166826736183, 4.73000595543503, 
4.44023340784953, 3.09333501144575, 4.35881755510305, 5.18741750910549, 
5.58348875895986, 6.11140873800865, 6.54912995115038, 7.06295188841488, 
7.67372446427145, 8.40813885910582, 9.30806145486793, 9.1532682896371, 
8.66516577218275, 8.2283334585154, 7.78803322738736, 6.63338647326677, 
5.84027839953848, 5.34384133619004, 5.42904421949546, 4.66831095851281, 
4.74506379824897, 4.49021089461522, 3.07796931479018, 4.1217081751311, 
5.14012654850439, 5.36151701687943, 5.66980178677372, 6.01978990929582, 
6.42277739775086, 6.89108438347427, 7.43891180869636, 8.0884637798103, 
8.12528629344052, 8.0037684219851, 7.88626899591346, 7.72705134947085, 
6.49204630463644, 5.53832636547457, 5.33078894588476, 4.98055757657446, 
4.63421867612929, 4.31216950703026, 4.0601002676063, 2.77184102938775, 
3.78612559323399, 4.42463386554498, 4.62383257394448, 4.90246206056175, 
5.22055525535581, 5.58906805889066, 6.02037960424028, 6.52930328523149, 
7.13892440760706, 7.30138340021254, 7.34092525148487, 7.38060453871976, 
7.37971301100791, 6.26914351168065, 5.2321378547673, 4.4381055134539, 
4.52424178992708, 4.68529499485843, 4.2375259073016, 3.80679536473264
)), row.names = c(NA, -147L), class = c("tbl_df", "tbl", "data.frame"
))

图 rn 的代码:

graph_data_long %>%
  ggplot(aes(x=as.numeric(power),y=value,group=obj_name,color=obj_name)) +
  geom_line() +
  geom_point(aes(shape=obj_name)) + 
  scale_y_continuous(trans = "log10") +
  theme_linedraw() +
  scale_shape_manual(breaks = 6:12, values = 6:12, name = "group")

作为 R 新手,任何帮助将不胜感激!预先感谢

r dataframe ggplot2 plot
1个回答
0
投票

要解决形状问题,请从

breaks=
中删除
scale_shape_manual
。此外,为了合并颜色和形状图例,请为两者设置相同的名称。为了修复类别的顺序,将它们转换为具有所需顺序的因子,我使用
reorder
并使用
gsub
进行一些字符串操作以按数字提取和渲染。最后,要在 x 轴上显示所有功率值,请相应地设置 x 刻度的分隔符。

library(ggplot2)
library(dplyr, warn = FALSE)

graph_data_long |>
  mutate(obj_name = reorder(
    obj_name,
    as.numeric(gsub("^.*?(\\d+)$", "\\1", obj_name))
  )) |>
  ggplot(aes(x = as.numeric(power), y = value, group = obj_name, color = obj_name)) +
  geom_line() +
  geom_point(aes(shape = obj_name)) +
  scale_x_continuous(
    breaks = as.numeric(unique(graph_data_long$power))
  ) +
  scale_y_continuous(trans = "log10") +
  theme_linedraw() +
  scale_shape_manual(
    values = 6:12
  ) +
  labs(color = "group", shape = "group") +
  theme(
    axis.text.x = element_text(angle = 90, vjust = .5)
  )

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