垂直图表转水平图表的数据点像素坐标转换问题咨询
方案1:直接修改函数适配水平图表(推荐)
你原有代码是将分类放在x轴、数值放在y轴绘制垂直折线图,改成水平布局只需交换分类轴和数值轴的绘制参数即可,无需额外做坐标换算,准确率更高,修改后的代码如下:
import numpy as np import matplotlib.pyplot as plt def horizontalPixelCoords(x_labels, y_values): coordList = [] # 原分类对应的x轴位置,水平布局下对应y轴坐标 y_vals = list(range(1, len(x_labels)+1)) fig, ax = plt.subplots() # 交换x、y参数绘制水平折线 points, = ax.plot(y_values, y_vals) x, y = points.get_data() xy_pixels = ax.transData.transform(np.vstack([x,y]).T) xpix, ypix = xy_pixels.T for xp, yp in zip(xpix, ypix): coordList.append((round(xp, 2), round(yp, 2))) plt.clf() plt.close() return coordList # 测试调用 x_labels = ['x1','x2','x3'] y_values = [30,40,50] coordValues = horizontalPixelCoords(x_labels, y_values)
方案2:垂直坐标转水平坐标换算逻辑
如果你需要基于原有垂直图表输出的坐标做换算,前提是两种布局的画布尺寸、边距、轴范围完全一致,可以用以下逻辑转换:
- 先获取画布的像素总宽度
w,计算方式为fig.get_figwidth() * fig.dpi - 转换公式:
xH = yV,yH = w - xV
该方案仅适用于画布参数完全匹配的场景,若存在轴标签、标题等元素占用边距的情况会出现换算误差,优先推荐使用方案1。
内容的提问来源于stack exchange,提问作者AndrewWicks
相关产品推荐
相关产品推荐

