【发布时间】:2020-07-21 08:43:19
【问题描述】:
我一直在 Jupyter Notebook 中使用以下代码绘制数据框:为了与仅在纸上以 0.005mm=1cm 的比例提供的旧数据进行比较,我需要以相同的比例导出和打印图表:0.005图中的 mm(x 轴和 y 轴)在图中必须为 1cm。
有什么方法可以定义自定义比例吗?有关信息,x 范围和 y 范围不是固定的,它们会根据我加载到数据框中的数据而有所不同。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.ticker as ticker
df = pd.DataFrame(np.array([[1.7, 0], [1.75, -0.012], [1.8, 0]]),
columns=['pos', 'val'])
# Plot results
sns.set()
plt.figure(figsize=(20,30))
plt.plot(df['pos'], df['val'])
ax = plt.axes()
ax.set_aspect('equal')
plt.xlabel('Position [mm]')
plt.ylabel('Höhe [mm]')
ax.xaxis.set_major_locator(ticker.MultipleLocator(0.005))
ax.yaxis.set_major_locator(ticker.MultipleLocator(0.005))
plt.show()
【问题讨论】:
-
我想,要对照一张旧纸质图表来检查你想打印你的情节,不是吗?在这种情况下,您必须①在绘图之前分析您的数据并确定图形的大小(以英寸为单位)以适应轴和②知道图形 dpi,您可以明确设置画布坐标(以像素为单位)和数据坐标之间的转换(请参阅 Matplotlib 文档中的转换教程)。如果你成功了,我建议你发布你的解决方案作为答案,因为这是一个有趣的问题,OTOH,如果你在 ping 我时遇到问题,我会尽力提供更多帮助......
-
@gboffi:我尝试按照您的建议解决问题。我定义了 x,y 限制并通过 (xmax-xmin)/0.005/2.54 计算了以英寸为单位的轴长度。我还阅读了转换教程,但我不明白如何将数据坐标转换为像素坐标可以帮助我解决问题。您能否更详细地说明您将如何处理它?
-
我已经尝试过一段时间在
matplotlib.transforms模块中走自己的路,但它是镜子的迷宫……很抱歉,但暂时我会放弃。要回答您的问题,您需要一个真正的 Matplotlib 开发人员,所以我建议您尝试提高 an issue on Matplotlib's github -
我已经改变了重新转换的想法,并且我已经发布了我认为这是一个很好的、有效的答案。请您看一下并告诉我它是否在某些方面不令人满意?
-
很好的解决方案。我不得不将 dpi=118 更改为 dpi=100,但现在比例完全符合我的要求。非常感谢!
标签: python matplotlib