修复matplotlib制作的条形图

monwx1rj  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(160)

所以,我想做一个图表,X轴是家族,Y轴是每个家族在我的数据集中出现的次数,我用Pandas库和matplotlib库导入了数据集,我试着做这个图表,但结果是轴颠倒了,元素也靠得太近了,这是我用的代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

ornitologia = pd.read_excel('C:/Users/mjoao/OneDrive/Documentos/Coleção_MNRJ/Ornitologia/ornitologia.xlsx')
familias = ornitologia['FAMÍLIA']
fig = plt.figure(figsize=(5,4))
eixo = fig.add_axes([0,0,1,1])

indice = range(len(familias))

eixo.bar(indice, familias)
eixo.set_title('Lotes por famílias', fontsize=15, pad=10)
eixo.set_xlabel('Famílias',fontsize=15)
eixo.set_ylabel('Lotes', fontsize=15)

我希望我能在正确的轴上得到数据,并且它们之间的距离更好,以便真正有用的图形可视化。

vwkv1x7d

vwkv1x7d1#

感谢您提供您的代码。我发现有几个问题可能会导致条形图的轴倒置,元素靠得太近。
首先,看起来你当前在图表的y轴上绘制的是families系列,而不是每个家庭的数量。为了得到每个家庭的数量,你可以使用value_counts()方法来计算每个家庭在families系列中的出现次数,如下所示:家族计数=家族值计数()
然后可以使用familia_counts在图形的y轴上绘制每个系列的计数。
第二,范围Python中的()函数生成一个从0开始直到的数字序列(但不包括)familias系列的长度。这意味着indice变量将包含值0,1,2,...,len然而,这些指数将沿着曲线图的x轴均匀地间隔开,要解决这个问题,你可以使用unique()方法来获取familias系列中唯一家族的列表,然后使用np.arange()来生成一个与家族相对应的等间距索引序列,如下所示:

familia_names = familias.unique()
indice = np.arange(len(familia_names))

最后,可以使用bar()方法的width和align参数调整条形宽度和条形间距。例如,可以设置width=0.8使条形更宽,并设置align ='center'使条形在其对应的x轴刻度上居中。
下面是代码的更新版本,它可以创建一个具有正确轴和间距的条形图:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

ornitologia = pd.read_excel('C:/Users/mjoao/OneDrive/Documentos/Coleção_MNRJ/Ornitologia/ornitologia.xlsx')
familias = ornitologia['FAMÍLIA']

familia_counts = familias.value_counts()
familia_names = familias.unique()
indice = np.arange(len(familia_names))

fig = plt.figure(figsize=(5,4))
eixo = fig.add_axes([0,0,1,1])

eixo.bar(indice, familia_counts, width=0.8, align='center')
eixo.set_xticks(indice)
eixo.set_xticklabels(familia_names, rotation=90)
eixo.set_title('Lotes por famílias', fontsize=15, pad=10)
eixo.set_xlabel('Famílias',fontsize=15)
eixo.set_ylabel('Lotes', fontsize=15)

plt.show()

我希望这能有所帮助!如果您有任何其他问题或有任何其他我可以帮助您的事情,请告诉我。

eqqqjvef

eqqqjvef2#

但它出来的时候轴是颠倒的
只需将bar()参数切换为

eixo.bar(familias, indice)

正如预期的那样,X轴将显示族,Y轴将显示“每个族出现的次数”。
并且元件也太靠近在一起
这是因为为图形设置的宽度较短:plt.figure(figsize=(5,4))。尝试增加第一个值,直到达到所需的外观。
如果不希望字符串名称重叠,您可能还需要尝试xticks标签旋转。

eixo.set_xticklabels(familias, rotation=90)

以下是您可以获得的图形类型(使用随机生成的值)

# [...]

fig = plt.figure(figsize=(10,4))  # Increase figure width
eixo = fig.add_axes([0,0,1,1])

eixo.bar(familias, indice)  # Invert families and indice

eixo.set_title('Lotes por famílias', fontsize=15, pad=10)
eixo.set_xlabel('Famílias',fontsize=15)
eixo.set_ylabel('Lotes', fontsize=15)

eixo.set_xticklabels(familias, rotation=90)  # Display the xticks labels vertically

相关问题