繁体   English   中英

调整ggplot2图例的标签

[英]Adjust labels of ggplot2 legend

在过去的几个小时里,我一直在互联网上搜索,但是找不到适合我的解决方案。 我是R新手,所以我想念一些东西。

我尝试使用ggplot2csv格式的文件( ; ggplot2绘制一个简单的图。

这是我写的脚本:

library(ggplot2)
library(reshape)

df = read.csv2('test.csv', dec='.')
column_names = colnames(df)

# melt data so that each row is a unique id-variable combination
df = melt(df, id=c(column_names[1]))

# plot data
ggplot(data=df, aes(x=df[, 1], y=value, colour=variable, shape=variable)) +
  geom_point() + # add points
  geom_line() + # add initial line to plot
  xlab('x') + # set xlabel
  ylab('y') + # set ylabel
  ggtitle('MyTitle') + # set title
  scale_x_log10(breaks=df[[column_names[1]]]) + # df[[]] accesses the atomic column))
  theme_minimal() +
  theme(legend.position="right", legend.title=element_blank())

还有一些测试输入test.csv

column 1;column 2;column 3
111.12;4313.5;6678.25
222.9;9386.0;12372.5

到目前为止,一切都很好-生成了情节。 但是图例包含条目column.2column.3 我知道,这是由于make.names使用打开该文件时read.csv2功能。

但是,我没有发现如何修改图例条目,以便在那里显示csv文件中的名称,即第column 2 column 3和第column 3

我试图提取colnames之前make.names应用,并使用一些scale_*功能,但我没有成功:

library(ggplot2)
library(reshape)

df = read.csv2('test.csv', check.names=F, dec='.')

column_names_str = colnames(df)[-1]

colnames(df) = make.names(colnames(df))
column_names = colnames(df)

# melt data so that each row is a unique id-variable combination
df = melt(df, id=c(column_names[1]))

# plot data
ggplot(data=df, aes(x=df[, 1], y=value, colour=variable, shape=variable)) +
  geom_point() + # add points
  geom_line() + # add initial line to plot
  xlab('x') + # set xlabel
  ylab('y') + # set ylabel
  ggtitle('MyTitle') + # set title
  scale_x_log10(breaks=df[[column_names[1]]]) + # df[[]] accesses the atomic column))
  theme_minimal() +
  theme(legend.position="right", legend.title=element_blank()) +
  scale_colour_hue(labels=column_names_str)

上面的脚本适当地更改了标签,但将图例分为两部分(形状和颜色)。 我想将其保留为带有适当标签的组合图例(形状和颜色)。

这是我所做的:

ggplot(data=df, aes(x=df[, 1], y=value, colour=variable, shape=variable)) +
geom_point() + # add points
geom_line(show.legend = TRUE) + # add initial line to plot
xlab('x') + # set xlabel
ylab('y') + # set ylabel
ggtitle('MyTitle') + # set title
scale_x_log10(breaks=df[[column_names[1]]])  # df[[]] accesses the atomic column))
#theme_minimal() +
#theme(legend.position="right", legend.title=element_blank()) +
#scale_colour_hue(labels=column_names_str)

结果是: 只有一个传说组

请检查它是否在寻找。

我指的是@Dinh Quang Duong给出的答案。 由于我不允许发表评论,因此我将其发布为答案:

要在“列”之后创建不带点的图标签,可以在创建图之前运行以下代码:

column_names_str = gsub("column.", "column ", column_names_str)

读取或创建数据框时,列名中的所有空格都会自动替换为点。 因此,您可以通过使用不带空格的列名来避免此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM