如何使用GNUPlot绘制带不同二元标记或颜色的数据文件?
解决方案:按标签区分样式绘制数据
下面提供几种常用工具的实现方法,满足将第一列数值放在Y轴,用第二列的-1/1标签区分颜色或标记的需求:
Python(Matplotlib)
通过筛选不同标签的数据,分别设置绘制样式:
import matplotlib.pyplot as plt import numpy as np # 加载数据,拆分Y值和标签 y_vals, labels = np.loadtxt('data.txt', delimiter=',', unpack=True) # 用数据索引作为X轴(若有自定义X可替换此处) x_vals = np.arange(len(y_vals)) # 筛选标签为1和-1的数据集 mask_pos = labels == 1 mask_neg = labels == -1 # 分别绘制两种标签的数据,用不同颜色和标记 plt.scatter(x_vals[mask_pos], y_vals[mask_pos], c='cornflowerblue', marker='o', label='标签 1') plt.scatter(x_vals[mask_neg], y_vals[mask_neg], c='tomato', marker='s', label='标签 -1') plt.ylabel('第一列数值') plt.xlabel('数据索引') plt.legend() plt.show()
Gnuplot
直接通过条件筛选数据,指定不同绘制样式:
set ylabel "第一列数值" set xlabel "数据索引" # 绘制标签为1的数据集(蓝色圆圈标记) plot 'data.txt' using 0:1:($2 == 1 ? 1 : NaN) with points pt 7 lc rgb "cornflowerblue" title "标签 1", \ # 绘制标签为-1的数据集(红色方形标记) 'data.txt' using 0:1:($2 == -1 ? 1 : NaN) with points pt 8 lc rgb "tomato" title "标签 -1"
注:using 0表示以行号作为X轴,若需自定义X可替换为对应列号。
R语言(ggplot2)
利用因子变量区分标签,自动映射样式:
library(ggplot2) # 读取数据并命名列 data <- read.csv('data.txt', header=FALSE, col.names=c('Y', 'Label')) # 添加数据索引作为X轴 data$X <- seq(nrow(data)) # 绘制散点图,按标签区分颜色和形状 ggplot(data, aes(x=X, y=Y, color=factor(Label), shape=factor(Label))) + geom_point(size=3) + labs(y='第一列数值', x='数据索引', color='标签', shape='标签') + scale_color_manual(values=c('-1'='tomato', '1'='cornflowerblue')) + scale_shape_manual(values=c('-1'=15, '1'=16))
内容的提问来源于stack exchange,提问作者Filippo Portera
相关产品推荐
相关产品推荐

