R 中带有 ggplot 和 melt 函数的线图:5 个类别中的多条线
Line plot in R with ggplot and melt function: multiple lines in 5 categories
我对 R 和 RStudio(以及这个论坛)真的很陌生。我对我的问题做了很多研究(也在这个论坛上),但我仍然无法获得正确的代码。我已经很接近了,但它开始变得非常令人沮丧。
情况:我必须做一个 REE 模式。 X 轴是元素,Y 值是元素的浓度。每个样本显示为从第一个元素到最后一个元素(x 轴)的一条线。所以这是一个多线图。
我的数据框如下所示:
Dataframe
Element PA PJ PA VA VJ PA PA PA R
Cs 8.393644832 9.274061495 8.466114498 124.8302919 14.17884799 24.29026324 16.62652167 136.5543529 15.7077603
Rb 66.08861281 74.96446056 66.4222049 80.31878486 113.7845646 104.5795331 91.41634436 202.6518905 93.96286011
Ba 162.7360691 196.7689123 132.1882321 87.87655638 108.7807453 64.40911125 56.2519533 34.28604744 77.26184806
Th 69.50420273 10.69239264 60.48609257 10.7117353 61.83547442 79.0044607 97.33558025 92.98479452 58.67343532
U 22.17827063 16.22661665 21.03802793 7.427212489 60.72442183 63.23055432 70.64986596 51.39206236 42.45965964
Nb 7.575924774 5.89169239 6.667024084 5.004676505 16.69613523 16.67449315 13.346969 43.34980892 13.17651141
Ta 10.71199686 10.60149917 7.779458029 6.835789229 15.94188008 20.1485504 15.27092298 31.27845584 17.07176294
K 233.8150547 271.8452141 241.561939 266.9153787 251.42161 239.4491524 213.3914505 423.9658521 251.42161
La 85.781713 16.03251185 67.342503 20.17716423 28.44896832 56.02416655 86.39273611 27.73347387 43.5324784
Ce 65.93594156 11.79019617 47.55025458 17.54266241 25.52628696 49.26589625 57.6574228 12.21647606 34.22346809
Pb 5.673083989 10.26288212 4.169977919 59.04878053 53.42872487 62.81513974 48.16121863 93.96287593 101.9287591
Pr 53.02764512 9.938334989 42.03809952 14.99962348 17.24082014 37.33542354 53.81996734 25.90256871 28.40450355
Nd 42.33110774 8.364811267 33.97954887 13.48174221 13.93479643 29.74581887 43.06564505 26.65600445 23.33544314
Sr 0.835397313 0.815930916 0.586568694 9.996068224 0.960554876 0.536331654 0.258305773 5.683560546 0.942533523
Sm 21.35644343 5.451089335 16.96532562 9.760893837 9.675593776 20.01885453 24.97813208 27.39269895 16.0149219
Hf 44.23389487 52.43907046 42.33828695 4.98724425 30.28451128 49.09584912 60.28147686 9.971733073 24.74464941
Zr 53.96191223 65.62184274 53.86924455 5.318772828 26.1413139 53.09855665 65.71920565 9.34974258 26.87927243
Ti 1.436464088 1.215469613 1.270718232 10.66298343 0.497237569 0.662983425 0.662983425 5.524861878 0.607734807
Eu 10.35812973 4.071632021 8.46110334 8.611540363 2.338303868 8.328014705 9.786671125 16.16876122 7.070426445
Gd 14.83675531 4.409737144 11.44401365 7.645177015 8.221991883 15.42873831 18.54842542 27.21876767 12.99376358
Tb 9.092304297 3.898598538 6.982306648 6.673348685 8.230478353 14.87434634 15.41911057 32.14506684 12.56736368
Dy 6.38743838 3.392714189 4.532800141 5.210803147 7.695892687 12.39499316 12.92923541 31.99972441 11.63756207
Ho 4.466797664 3.082328768 3.346515335 4.589583127 7.111016931 11.57170602 10.63770512 32.956692 11.03232412
Y 3.35940512 2.382622411 2.505043001 5.01436475 6.489644503 8.926279165 8.788977547 37.04567217 10.68214568
Er 4.715669314 3.488584654 3.470548704 4.488104792 7.032818937 11.60405599 10.95403677 34.6355416 11.22917717
Tm 4.269381986 3.989071741 3.178992509 3.900228104 6.798645341 11.83388929 10.19664082 33.36983427 10.85995832
Yb 5.223135226 4.959299109 3.870356399 3.60128161 6.859780617 11.56204692 10.80225244 32.97149663 10.56174395
Lu 7.20048667 6.451947335 4.9601101 3.949574922 6.395672788 11.91831865 11.2065581 31.70363964 9.943874048
我想让 x 轴的元素按此特定顺序排列,如数据框 column1 中所示(使用 levels=unique 选项完成)。对于 y 值,我想要 5 个类别(PA、PJ、VA、VJ、R),每个类别都有特定的颜色。所有列都应绘制为线条。重要提示:每个样本(列)应该是一条线并绘制。图例应该很简单,只显示:color = category。但这不是那么必要,我也可以在最后用图形编辑程序手动完成图例。所以这不是主要问题。
我目前的结果:
require(ggplot2)
require(reshape2)
df <- read.csv2("ultra_REE_ref.csv", header = T, sep = ";", dec = ".")
df <- melt(df , id.vars = 'Element', variable.name = "series")
df$Element <- factor(df$Element, levels=unique(df$Element))
ggplot(df,aes(Element,value, col=series)) + geom_point() +
theme(legend.position="none") + scale_y_log10()
生成这张图片:
有没有人知道如何
1.make 线而不是点?我曾经有过线条,但我无法重现它,因为我操纵了 x 轴的字母顺序。当我将代码更改为 geom_line() 时,它根本不会给出任何输出。
删除底部 y = 0 处的点?我已经从输入文件中删除了所有零(至少我认为我做对了)。
用不同的颜色定义每个类别?当我制作 5 个不同的输入文件并为任何文件本身定义样式时,我也会很高兴。就像将线条绘制到现有图中一样。这也很酷。
- 制作一个没有任何背景的空背景lines/shades。
如果有人能帮我做这件事,我会很高兴。非常感谢您到目前为止的阅读 :) 问候!
您已完成重塑数据和创建因子水平的大部分工作。对于线条,问题是您需要按样本分组。对于 y = 0,数据框中必须有零值,否则它们不会出现在图中。要删除灰色背景,您可以应用 theme_minimal
等主题。要完全删除所有背景线,您需要修改 panel.grid
元素。
让我们把所有这些放在一起。我更喜欢 dplyr
进行数据操作,当我从您的数据创建数据框时,PA
列被重命名,因为它们不唯一。
library(dplyr)
library(ggplot2)
df %>%
mutate(Element = factor(Element, levels = unique(Element))) %>%
gather(sample, value, -Element) %>%
ggplot(aes(Element, value)) +
geom_line(aes(color = sample, group = sample)) +
scale_y_log10() +
theme_minimal() +
theme(panel.grid = element_blank())
结果:
您可以使用 调整颜色,例如 scale_color_manual
或 scale_color_brewer
。
我对 R 和 RStudio(以及这个论坛)真的很陌生。我对我的问题做了很多研究(也在这个论坛上),但我仍然无法获得正确的代码。我已经很接近了,但它开始变得非常令人沮丧。
情况:我必须做一个 REE 模式。 X 轴是元素,Y 值是元素的浓度。每个样本显示为从第一个元素到最后一个元素(x 轴)的一条线。所以这是一个多线图。 我的数据框如下所示: Dataframe
Element PA PJ PA VA VJ PA PA PA R
Cs 8.393644832 9.274061495 8.466114498 124.8302919 14.17884799 24.29026324 16.62652167 136.5543529 15.7077603
Rb 66.08861281 74.96446056 66.4222049 80.31878486 113.7845646 104.5795331 91.41634436 202.6518905 93.96286011
Ba 162.7360691 196.7689123 132.1882321 87.87655638 108.7807453 64.40911125 56.2519533 34.28604744 77.26184806
Th 69.50420273 10.69239264 60.48609257 10.7117353 61.83547442 79.0044607 97.33558025 92.98479452 58.67343532
U 22.17827063 16.22661665 21.03802793 7.427212489 60.72442183 63.23055432 70.64986596 51.39206236 42.45965964
Nb 7.575924774 5.89169239 6.667024084 5.004676505 16.69613523 16.67449315 13.346969 43.34980892 13.17651141
Ta 10.71199686 10.60149917 7.779458029 6.835789229 15.94188008 20.1485504 15.27092298 31.27845584 17.07176294
K 233.8150547 271.8452141 241.561939 266.9153787 251.42161 239.4491524 213.3914505 423.9658521 251.42161
La 85.781713 16.03251185 67.342503 20.17716423 28.44896832 56.02416655 86.39273611 27.73347387 43.5324784
Ce 65.93594156 11.79019617 47.55025458 17.54266241 25.52628696 49.26589625 57.6574228 12.21647606 34.22346809
Pb 5.673083989 10.26288212 4.169977919 59.04878053 53.42872487 62.81513974 48.16121863 93.96287593 101.9287591
Pr 53.02764512 9.938334989 42.03809952 14.99962348 17.24082014 37.33542354 53.81996734 25.90256871 28.40450355
Nd 42.33110774 8.364811267 33.97954887 13.48174221 13.93479643 29.74581887 43.06564505 26.65600445 23.33544314
Sr 0.835397313 0.815930916 0.586568694 9.996068224 0.960554876 0.536331654 0.258305773 5.683560546 0.942533523
Sm 21.35644343 5.451089335 16.96532562 9.760893837 9.675593776 20.01885453 24.97813208 27.39269895 16.0149219
Hf 44.23389487 52.43907046 42.33828695 4.98724425 30.28451128 49.09584912 60.28147686 9.971733073 24.74464941
Zr 53.96191223 65.62184274 53.86924455 5.318772828 26.1413139 53.09855665 65.71920565 9.34974258 26.87927243
Ti 1.436464088 1.215469613 1.270718232 10.66298343 0.497237569 0.662983425 0.662983425 5.524861878 0.607734807
Eu 10.35812973 4.071632021 8.46110334 8.611540363 2.338303868 8.328014705 9.786671125 16.16876122 7.070426445
Gd 14.83675531 4.409737144 11.44401365 7.645177015 8.221991883 15.42873831 18.54842542 27.21876767 12.99376358
Tb 9.092304297 3.898598538 6.982306648 6.673348685 8.230478353 14.87434634 15.41911057 32.14506684 12.56736368
Dy 6.38743838 3.392714189 4.532800141 5.210803147 7.695892687 12.39499316 12.92923541 31.99972441 11.63756207
Ho 4.466797664 3.082328768 3.346515335 4.589583127 7.111016931 11.57170602 10.63770512 32.956692 11.03232412
Y 3.35940512 2.382622411 2.505043001 5.01436475 6.489644503 8.926279165 8.788977547 37.04567217 10.68214568
Er 4.715669314 3.488584654 3.470548704 4.488104792 7.032818937 11.60405599 10.95403677 34.6355416 11.22917717
Tm 4.269381986 3.989071741 3.178992509 3.900228104 6.798645341 11.83388929 10.19664082 33.36983427 10.85995832
Yb 5.223135226 4.959299109 3.870356399 3.60128161 6.859780617 11.56204692 10.80225244 32.97149663 10.56174395
Lu 7.20048667 6.451947335 4.9601101 3.949574922 6.395672788 11.91831865 11.2065581 31.70363964 9.943874048
我想让 x 轴的元素按此特定顺序排列,如数据框 column1 中所示(使用 levels=unique 选项完成)。对于 y 值,我想要 5 个类别(PA、PJ、VA、VJ、R),每个类别都有特定的颜色。所有列都应绘制为线条。重要提示:每个样本(列)应该是一条线并绘制。图例应该很简单,只显示:color = category。但这不是那么必要,我也可以在最后用图形编辑程序手动完成图例。所以这不是主要问题。
我目前的结果:
require(ggplot2)
require(reshape2)
df <- read.csv2("ultra_REE_ref.csv", header = T, sep = ";", dec = ".")
df <- melt(df , id.vars = 'Element', variable.name = "series")
df$Element <- factor(df$Element, levels=unique(df$Element))
ggplot(df,aes(Element,value, col=series)) + geom_point() +
theme(legend.position="none") + scale_y_log10()
生成这张图片:
有没有人知道如何
1.make 线而不是点?我曾经有过线条,但我无法重现它,因为我操纵了 x 轴的字母顺序。当我将代码更改为 geom_line() 时,它根本不会给出任何输出。
删除底部 y = 0 处的点?我已经从输入文件中删除了所有零(至少我认为我做对了)。
用不同的颜色定义每个类别?当我制作 5 个不同的输入文件并为任何文件本身定义样式时,我也会很高兴。就像将线条绘制到现有图中一样。这也很酷。
- 制作一个没有任何背景的空背景lines/shades。
如果有人能帮我做这件事,我会很高兴。非常感谢您到目前为止的阅读 :) 问候!
您已完成重塑数据和创建因子水平的大部分工作。对于线条,问题是您需要按样本分组。对于 y = 0,数据框中必须有零值,否则它们不会出现在图中。要删除灰色背景,您可以应用 theme_minimal
等主题。要完全删除所有背景线,您需要修改 panel.grid
元素。
让我们把所有这些放在一起。我更喜欢 dplyr
进行数据操作,当我从您的数据创建数据框时,PA
列被重命名,因为它们不唯一。
library(dplyr)
library(ggplot2)
df %>%
mutate(Element = factor(Element, levels = unique(Element))) %>%
gather(sample, value, -Element) %>%
ggplot(aes(Element, value)) +
geom_line(aes(color = sample, group = sample)) +
scale_y_log10() +
theme_minimal() +
theme(panel.grid = element_blank())
结果:
您可以使用 调整颜色,例如 scale_color_manual
或 scale_color_brewer
。