Matplotlib: как сделать пробел между двумя строковыми символами - PullRequest
0 голосов
/ 03 февраля 2020

Я хочу сделать 2 диаграммы с пробелом, если я напишу:

x_axis_1 = ['A','B','C']
y_axis_1 = [5,10,15]
y_axis_2 = [7,3,4]
plt.figure(figsize = (15,6))
plt.bar(x_axis_1-0.2, y_axis_1)
plt.bar(x_axis_1+0.2, y_axis_2)
plt.show()

Я получу

TypeError: unsupported operand type(s) for -: 'list' and 'float'

, потому что x_axis это строки

Как я могу изменить это?

Ответы [ 2 ]

2 голосов
/ 03 февраля 2020

Ваш x_axis_1 представляет собой список строк, поэтому вы получаете эту ошибку. Вам необходимо передать числовые значения c для позиционирования баров. Я использовал -0.1 и +0.1, чтобы расположить столбики рядом.

plt.bar(np.arange(3)-0.1, y_axis_1, width=0.2, align='center')
plt.bar(np.arange(3)+0.1, y_axis_2, width=0.2, align='center')
plt.xticks(range(3), x_axis_1)

enter image description here

0 голосов
/ 03 февраля 2020

Вы имеете в виду, как это?

import matplotlib.pyplot as plt

# You can use this to create a figure and axes in one line
# If you want to make 4 plots in a square configuration you'd need
# fig, ((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2,ncols=2,figsize=(15,6))
# Google how to do multiplots in matplotlib.
fig, (ax1,ax2) = plt.subplots(nrows=1,ncols=2,figsize=(15,6))

x_axis_1 = ['A','B','C']
y_axis_1 = [5,10,15]
y_axis_2 = [7,3,4]
ax1.bar(x_axis_1, y_axis_1)
ax2.bar(x_axis_1, y_axis_2)
plt.show()

PS: Включить import операторов в ваш код. Досадно смотреть, какие модули вы используете самостоятельно.

PSS: использование минуса в списке python никогда не работает, даже если оно заполнено числами. Если вы хотите делать такие вещи, вам нужны numpy массивы:

import numpy as np
array = np.array([1,2,3,2,1])
print(array-0.2)

РЕДАКТИРОВАННАЯ ПРАВИЛЬНАЯ ВЕРСИЯ:

Вот так:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(15,6))

# you need to define a bar width for alignment later on
bar_width = 0.35

# Those are just labels, not the positions
x_axis_labels = ['A','B','C']
# Those are just positions, not labels
x_axis_1 = np.arange(len(x_axis_labels))
y_axis_1 = np.array([5,10,15])
y_axis_2 = np.array([7,3,4])

ax.bar(x_axis_1, y_axis_1,bar_width)
ax.bar(x_axis_1+bar_width, y_axis_2,bar_width)

# This sets the number of ticks to the number of labels.
# It also aligns the tick positions with the center of the bars. Notice the + bar_width/2
ax.set_xticks(np.arange(len(x_axis_labels))+bar_width/2)
# This sets the three ticks, which are now at the right positions, to your x_axis_labels
ax.set_xticklabels(x_axis_labels)
plt.show()

PSSS : Постарайтесь сформулировать свои вопросы более точно. Мне было трудно понять, что вы имели в виду. Также этот вопрос является дубликатом этого вопроса: Python Создать гистограмму, сравнивающую 2 набора данных .

PSSSS: Karma plz. Я хочу набрать 420 баллов.

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