调整ggplot2图例的标签

时间:2017-07-28 09:48:17

标签: r ggplot2

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

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

这是我写的脚本:

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 2column 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)

上述脚本可以正确更改标签,但会将图例分为两部分(形状和颜色)。 我想将它作为一个组合的图例(形状和颜色)与适当的标签保持一致。

2 个答案:

答案 0 :(得分:0)

以下是我的所作所为:

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)

结果是: Only one legend group

请检查它是否是您要找的。

答案 1 :(得分:0)

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

在"列"之后创建没有点的绘图标签;您可以在创建绘图之前运行以下代码:

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

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