【问题标题】:Plotting a dashed line on a log-log plot using Python's matplotlib使用 Python 的 matplotlib 在对数图上绘制虚线
【发布时间】:2017-07-28 09:55:15
【问题描述】:

我目前正在尝试使用以下代码在我的日志图上放置一条水平虚线。 K2H_HUBp[:,1]DivR 是两个 [1x6000] 数组。变量 ones 是一个 [1x6000] 数组,其中包含一个。

此图的重点是显示“土豆”的半径与“红薯”的比较。因此,如果它们相同,则所有数据点都应该落在这条 y = 1 线上。

plt.scatter(K2H_HUBp[:,1],DivR,s=2.5,alpha=0.15,c = '#A9A9A9')
plt.loglog(K2H_HUBp[:,1], ones, '--',dashes=(1, 1),linewidth=0.9,c='#3C323C')
plt.ylim((0.1,10))
plt.xlim((0.35,12))
ax = plt.gca()
ax.tick_params(which = 'both', direction = 'in',right='on',top='on')
ax.set_xscale('log')
ax.set_yscale('log')
plt.ylabel("Radius (Potatos/Sweet Potatos)")
plt.xlabel("Radius (Potatos)")

我希望 ones 线在情节中同样虚线。我遇到了获取此graph here 的问题,其中行的间距不相等。

我正在寻找与this 非常相似的图表(是的,这是一个线性图表,我正在使用对数对数图表)

我尝试修改 dashes() 参数,但没有成功。

提前感谢您的指导。 :)

【问题讨论】:

  • “不平等的时尚”是什么意思?您的代码中的 abcdpzero 是什么? (注意:如果zero == 0,则不能将其绘制在对数图上)。另请注意,该论文图 1 中的底部图不是对数对数(左侧是线性线性,右侧是对数线性)。在一个简单的测试中,我能够毫无问题地在对数图上绘制水平虚线。如果您可以添加一个minimal reproducible example 以清楚地显示问题,那将是有帮助的。
  • 由于参数dashes=(1, 20),破折号实际上应该以1到20的恒定比率出现。要获得 1 比 1 的比率,请使用 dashes=(1, 1) 或直接忽略该参数。如果那不是您想要的,我建议您清楚地说明您得到什么,您期望什么以及您得到的不是您期望的。 (至少用3句话,最好用图片来解释)
  • 嘿,汤姆和 ImportanceOfBeingErnest,我确实尝试将绘图放置在这里,但昨天将图像加载到问题中时遇到问题。今天我会尝试重新加载它们。不幸的是,这并不能解决我的问题,我现在将重新阐述它:) 感谢您对如何改进沟通我的问题的建议,这是一个很大的帮助!

标签: python matplotlib plot loglog


【解决方案1】:

您可以使用其他loglog-plot 或标准plot 绘制它。这段代码是否提供了你所追求的东西?

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(2, 1)

x = np.linspace(0.01, 10, 100)
y = x**5

ax1.loglog(x, y, '.')
ax1.plot([x[0], x[-1]], [y[0], y[-1]], '--', label='with plot')
ax1.legend()

ax2.loglog(x, y, '.')
ax2.loglog([x[0], x[-1]], [y[0], y[-1]], '--', label='with loglog')
ax2.legend()

fig.show()
# plt.show()

【讨论】:

  • 嘿pathoren,不幸的是,这对我不起作用。仍然得到相同的线路。
  • 您使用的是哪个 matplotlib 版本?我使用的是 MPL 2.0,我认为他们在 2.0 中对线条和破折号进行了很多更新。
【解决方案2】:

所以事实证明 Pyplot 有一个漂亮的函数,叫做 hlines。该函数仅使用以下参数绘制一条水平线:

matplotlib.pyplot.hlines(y, xmin, xmax, colors='k', linestyles='solid', label='', hold=None, data=None, **kwargs)

就我而言,我现在已经完全删除了代码:

plt.loglog(K2H_HUBp[:,1], ones, '--',dashes=(1, 1),linewidth=0.9,c='#3C323C')

并将其替换为:

plt.hlines(1, 0.001, 20, linestyles='dashed',linewidth=0.9,colors='#3C323C')

从 x 0.001 到 x 20 绘制一条 y = 1 线。这给了我我想要的结果是 this graph

感谢您的所有指导,我希望这对以后的其他人有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-17
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多