过去几个小时我一直在网上搜索,但找不到适合我的解决方案。
我是R
的新手,我想我错过了一些东西。
我尝试使用ggplot2
为csv
格式(;
- 格式化的文件)绘制一个简单的图表。
这是我写的脚本:
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
。
我尝试在应用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)
上述脚本可以正确更改标签,但会将图例分为两部分(形状和颜色)。 我想将它作为一个组合的图例(形状和颜色)与适当的标签保持一致。
答案 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)
请检查它是否是您要找的。 p>
答案 1 :(得分:0)
我指的是@Dinh Quang Duong给出的答案。由于我不允许发表评论,我将其作为答案发布:
在"列"之后创建没有点的绘图标签;您可以在创建绘图之前运行以下代码:
column_names_str = gsub("column.", "column ", column_names_str)
在读取或创建数据框时,列名中的所有空格都将自动替换为点。因此,您可以通过使用没有空格的列名来避免此问题。