Python实现用户输入数据生成柱状图及输入拆分问题求助
问题:柱状图无法正确加载用户输入数据
我尝试用用户输入的数据生成柱状图,已经能生成图表,但没法把实际数据正确插入,还存在不同项拆分的问题。
原代码
import matplotlib.pyplot as plt definition = input('Definition of data set: ') datay = input('Enter Y-axis data (Integer): ') datax = input('Enter X-axis data (Term): ') y = input('Y-axis label: ') x = input('X-axis label: ') data_num = datay.split() datalist = [round(float(a)) for a in data_num] min_val = min(datalist) max_val = max(datalist) left_coordinates=[min_val, max_val] heights= (datay) bar_labels= [datax] plt.bar(left_coordinates,heights,tick_label=bar_labels,width=0.6,color=['red','black']) plt.xlabel(x) plt.ylabel(y) plt.title(definition) plt.show()
输入示例
Definition of data set: Amount of ants on different types of food
Enter Y-axis data (Integer): 4 5 10
Enter X-axis data (Term): apple mango ice-cream
Y-axis label: Amount of ants
X-axis label: Type of food
问题分析
原代码存在三个核心错误:
left_coordinates错误使用了Y轴数据的最小/最大值作为柱子位置,完全不符合柱状图的X轴定位逻辑heights直接传入原始的Y轴输入字符串,没有使用转换后的数值列表datalistbar_labels未拆分X轴输入的多个标签,把整串文本当成了单个标签
修正后的代码
import matplotlib.pyplot as plt definition = input('Definition of data set: ') datay = input('Enter Y-axis data (Integer): ') datax = input('Enter X-axis data (Term): ') y_label = input('Y-axis label: ') x_label = input('X-axis label: ') # 拆分并转换Y轴数据为整数列表 y_data = [int(num) for num in datay.split()] # 拆分X轴标签为列表 x_labels = datax.split() # 校验X/Y数据长度是否匹配 if len(y_data) != len(x_labels): print("错误:X轴标签和Y轴数据数量不匹配") else: # 用X轴标签对应每个柱子的位置与标签,设置柱子样式 plt.bar(x_labels, y_data, width=0.6, color=['red', 'orange', 'blue']) plt.xlabel(x_label) plt.ylabel(y_label) plt.title(definition) plt.show()
修正说明
- 将X轴输入字符串拆分为独立标签列表
x_labels,每个标签对应一个柱子 - 使用转换后的数值列表
y_data作为柱子高度,确保数据正确加载 - 用
x_labels直接作为plt.bar的X轴参数,自动匹配每个柱子的位置与标签 - 新增数据长度校验,避免输入不匹配导致的异常
内容的提问来源于stack exchange,提问作者MYW
相关产品推荐
相关产品推荐

