[英]Adjust labels of ggplot2 legend
在过去的几个小时里,我一直在互联网上搜索,但是找不到适合我的解决方案。 我是R
新手,所以我想念一些东西。
我尝试使用ggplot2
为csv
格式的文件( ;
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.2
和column.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.