如何在gnuplot中绘制带双x轴、双y轴及双独立坐标原点的水平条形图
Gnuplot双独立原点水平条形图实现说明
该双轴双独立原点的水平条形图完全可以通过Gnuplot实现,无需替换绘图工具。
实现逻辑
Gnuplot原生支持自定义任意坐标轴的锚定位置、数值映射范围,不需要额外坐标换算即可实现对角双独立原点的布局:
- 数据集1(x1/y1坐标系,左上角原点):
将y1轴锚定在绘图区左边界,x1轴锚定在绘图区上边界;反向设置y1轴的数值范围(从上到下数值递减),让两个轴的自然交点落在绘图区左上角,作为这套坐标系的原点。之后将数据集1的水平条形图映射到这套坐标系下,即可完成第一组数据的绘制。 - 数据集2(x2/y2坐标系,右下角原点):
将y2轴锚定在绘图区右边界,x2轴锚定在绘图区下边界;设置x2轴的数值方向为从右到左递增、y2轴的数值方向为从下到上递增,让两个轴的自然交点落在绘图区右下角,作为这套坐标系的独立原点。这套坐标系和第一套完全解耦,可设置独立的数值量程,不会互相干扰。
核心配置参考
实际编写Gnuplot脚本时,可通过以下核心命令快速搭建基础框架:
# 第一套坐标系(左上角原点)配置 set x1range [0: first_dataset_max] set y1range [first_y_max: 0] set x1axis at y first_y_max set y1axis at x 0 # 第二套坐标系(右下角原点)配置 set x2range [second_dataset_max: 0] set y2range [0: second_y_max] set x2axis at y 0 set y2axis at x first_dataset_max # 分别对应两套坐标系绘制水平条形 plot "dataset1.dat" using 2:1 with boxes axes x1y1, \ "dataset2.dat" using 2:1 with boxes axes x2y2
可替代工具说明
如果在Gnuplot中调试自定义轴位置遇到障碍,可通过以下工具实现同类效果:
- Matplotlib:支持自定义坐标轴显示位置、反向设置坐标范围,既可以通过原生双轴功能调试对角布局,也可以通过对齐两个独立子图的绘图区域实现双原点效果,灵活度较高。
- Origin:内置无依赖的多轴锚定功能,可直接拖动坐标轴交点到指定位置生成对应坐标系,不需要手动编写坐标映射代码,适合快速出图的场景。
- R语言ggplot2:通过次坐标轴配置结合坐标方向翻转,可实现双套独立坐标的对角布局,水平条形图的样式调整能力较强。
内容的提问来源于stack exchange,提问作者Christian Hähnlein
相关产品推荐
相关产品推荐

