Python 数据可视化:使用 matplotlib 绘制柱状图并解决常见错误
import os import pandas as pd import numpy as np import matplotlib.pyplot as plt
设置工作路径
toolpath = r'C:\Users%s\Desktop' % username os.chdir(toolpath)
读取CSV文件
df = pd.read_csv(r'BatteryMonitor1_modified.csv')
获取capacity列的值
variation_array = df['capacity'].values
将数据转换为字符串,并用逗号隔开
variation_str = ','.join(map(str, variation_array))
构造x_ray字符串
x_ray = '[' + variation_str + ']'
打印x_ray和数据总量
print(x_ray) total_rows = len(df) print(total_rows) # 总数量
定义绘图函数
def photo(x_ray, total_rows): # 将x_ray字符串转换为numpy数组 y = np.array(eval(x_ray)) x = np.arange(1, total_rows + 1) # 生成离散的 x 坐标
# 清除之前的图形数据
plt.clf()
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
# 绘制柱状图
plt.bar(x, y, width=0.5, label='capacity', alpha=0.3, color='b')
# 设置网格线和图例
plt.grid(True)
plt.legend()
# 显示图形
plt.show()
调用绘图函数
photo(x_ray, total_rows)
解决常见错误
-
TypeError: len() of unsized object
这个错误通常是因为
x_ray变量的值没有被正确解析成一个可迭代对象。在代码中,x_ray是一个字符串,len()函数无法直接对字符串进行操作。为了解决这个问题,可以使用eval()函数将字符串转换为 Python 列表,并使用np.array()将列表转换为 NumPy 数组。 -
AttributeError: module 'matplotlib.pyplot' has no attribute 'spines'
这个错误是因为
spines属性是属于matplotlib.axes.Axes对象的,而不是matplotlib.pyplot模块。在代码中,plt.spines['right'].set_visible(False)尝试直接使用plt.spines,导致了错误。为了解决这个问题,需要先获取当前的 Axes 对象,然后调用其spines属性进行操作。可以使用plt.gca()函数获取当前的 Axes 对象。
改进代码
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置工作路径
toolpath = r'C:\Users\%s\Desktop' % username
os.chdir(toolpath)
# 读取CSV文件
df = pd.read_csv(r'BatteryMonitor1_modified.csv')
# 获取capacity列的值
variation_array = df['capacity'].values
# 将数据转换为字符串,并用逗号隔开
variation_str = ','.join(map(str, variation_array))
# 构造x_ray字符串
x_ray = '[' + variation_str + ']'
# 打印x_ray和数据总量
print(x_ray)
total_rows = len(df)
print(total_rows) # 总数量
# 定义绘图函数
def photo(x_ray, total_rows):
# 将x_ray字符串转换为numpy数组
y = np.array(eval(x_ray))
x = np.arange(1, total_rows + 1) # 生成离散的 x 坐标
# 清除之前的图形数据
plt.clf()
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
# 绘制柱状图
plt.bar(x, y, width=0.5, label='capacity', alpha=0.3, color='b')
# 设置网格线和图例
plt.grid(True)
plt.legend()
# 获取当前的 Axes 对象
ax = plt.gca()
# 隐藏右边的轴线
ax.spines['right'].set_visible(False)
# 显示图形
plt.show()
# 调用绘图函数
photo(x_ray, total_rows)
总结
本文介绍了使用 Python 中的 pandas 和 matplotlib 库进行数据可视化的方法,并提供了解决常见错误的方案。通过本文,您可以学习到如何读取 CSV 文件、将数据转换为 NumPy 数组,以及如何使用 matplotlib 绘制柱状图。此外,还学习了如何设置中文显示、添加网格线和图例、以及隐藏轴线等技巧。希望本文能帮助您更好地理解和应用 Python 数据可视化技术。
原文地址: https://www.cveoy.top/t/topic/flNN 著作权归作者所有。请勿转载和采集!