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)

解决常见错误

  1. TypeError: len() of unsized object

    这个错误通常是因为 x_ray 变量的值没有被正确解析成一个可迭代对象。在代码中, x_ray 是一个字符串, len() 函数无法直接对字符串进行操作。为了解决这个问题,可以使用 eval() 函数将字符串转换为 Python 列表,并使用 np.array() 将列表转换为 NumPy 数组。

  2. 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 数据可视化技术。

Python 数据可视化:使用 matplotlib 绘制柱状图并解决常见错误

原文地址: https://www.cveoy.top/t/topic/flNN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录