Как решить "объект PathCollection не имеет атрибута" yaxis "ошибка? - PullRequest
0 голосов
/ 22 декабря 2019

Я студент MSc, и я использовал для создания графиков и графиков с помощью коммерческих пакетов, таких как OriginPro, Excel и Matlab. Хотя эти программные продукты обеспечивают удобство работы с пользователем, у них есть ряд существенных недостатков, поскольку они зависят от конкретной ОС и, как правило, очень дороги.

Поэтому я начал изучать Python, используя библиотеку matplotlib с VS Code, однако яУ меня возникли некоторые проблемы с некоторыми библиотечными функциями и операторами, которые кажутся стандартными для matplotlib и numPy, но это не работает.

Например, я делаю некоторые шаблоны для диаграмм разброса и не могу контролироватьвторостепенные тики, потому что он не распознает операторы xaxix и yaxix:

Пример кода:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, AutoMinorLocator

.
.
.

fig = plt.figure(figsize=(x_pixels/my_dpi, y_pixels/my_dpi), dpi=my_dpi)
ax = plt.scatter(x*format_x, y*format_y, s = size, alpha = transparency, color = color, label = legend_text)

.
.
.

# Major Ticks
plt.tick_params(axis = 'both', which = 'major', length = majorT_length, direction = majorT_direction, color = majorT_color, labelsize = label_size, top = 'on', right = 'on')

# Minor Ticks
plt.minorticks_on()
plt.tick_params(axis='both', which='minor', length = minorT_length, direction = minorT_direction, color = minorT_color, top = 'on', right = 'on')
ax.yaxis.set_minor_locator(AutoMinorLocator(2))
ax.xaxis.set_minor_locator(AutoMinorLocator(2))

# Figure Layout
plt.tight_layout()
plt.savefig(output_file, dpi=my_dpi, bbox_inches=borders)

plt.show()

и Терминал показывает эту ошибку:

enter image description here

  File "c:/Users/luagu/Desktop/Python Matplotlib Training/Scatter_Template.py", line 128, in <module>
    ax.yaxis.set_minor_locator(AutoMinorLocator(2))
AttributeError: 'PathCollection' object has no attribute 'yaxis'

Что я делаю не так?

Заранее спасибо!

1 Ответ

2 голосов
/ 22 декабря 2019

Вы написали ax = plt.scatter, но ваш ax - это художник, возвращенный методом scatter, а не объект Axes. Что вы хотите сделать, это:

plt.scatter(...)
...
ax = plt.gca()
ax.yaxis.set_minor_locator(AutoMinorLocator(2))
ax.xaxis.set_minor_locator(AutoMinorLocator(2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...