Как работает matplotlib? - PullRequest
       0

Как работает matplotlib?

1 голос
/ 15 апреля 2020

Я просто столкнулся с проблемой, когда понял, что строю строковые данные, и мои графики не отражают данные, с которыми я имел дело. Похоже, что matplotlib.pyplot не выдает ошибку, когда ему передается строковое значение, и идет дальше и строит график чего-то, но что именно он рисует? Он показывает числа для шкалы, но это просто список строковых значений без учета числовых отношений. Как он решает, где построить точки?

Вот фрагмент кода для иллюстрации моего вопроса и сюжет ниже.

import matplotlib.pyplot as plt

# Define data arrays
x = range(10)
data = [4.73, 5.01, 5.29, 6.75, 4.48, 4.49, 5.44, 5.53, 4.89, 4.59]
strData = ['4.73', '5.01', '5.29', '6.75', '4.48', '4.49', '5.44', '5.53', '4.89', '4.59']

# Open figure for plotting
fig = plt.figure()

# Define axis for plotting
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()

# Plot data
lns1 = ax1.plot(x, data, '-r', label = 'Float')
# Plot string data  
lns2 = ax2.plot(x, strData, 'ob', label = 'String')

# Compile labels
lns = lns1+lns2
labs = [l.get_label() for l in lns]

# Plot the legend
fig.legend(lns, labs, loc='upper right', fontsize= 9, prop={'size':9}, numpoints=1, framealpha=1)

# Show figure
plt.show()

enter image description here

1 Ответ

0 голосов
/ 15 апреля 2020

Как вы можете видеть, он будет использовать строки в том порядке, в котором вы их указали, то есть сначала будет отображена строка с наименьшим индексом, а затем следующая с индексом 1 (как вы можете видеть на второй оси y, где за 4.73 следуют 5.01 и 5.29. Расстояние между каждым значением просто одно, так как matplotlib не имеет понятия для сортировки строк.

Вы можете увидеть это, если вы используете диапазон вместо списка строк:

strData = list(range(10))
ax2.set_yticks(strData)

это даст тот же результат: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...