Построение пунктирной линии на графике log-log с использованием Python matplotlib

В настоящее время я пытаюсь разместить горизонтальную пунктирную линию на графике журнала, используя приведенный ниже код. K2H_HUBp [:, 1] и DivR - это два [1x6000] массива. Переменная none представляет собой массив [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)")

Я бы хотел, чтобы эти линии были одинаково пунктирными по сюжету. У меня проблема с получением этого графика здесь, где линии не одинаково разнесены.

Я ищу график, который будет очень похож на этот (да, это линейный график, и я работаю с графиком log-log)

Я попытался изменить параметры dashes() без удачи.

Заранее спасибо за ваше руководство.:)

2 ответа

Вы можете либо построить это с другим loglog-сюжет или со стандартом 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()

Получается, что в 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')

построение линии a y = 1 от x 0,001 до x 20. Тогда я получу желаемый результат - этот график.

Спасибо за ваше руководство, и я надеюсь, что это поможет кому-то еще в будущем!

Другие вопросы по тегам