【问题标题】:Python Plotting Data Using the Row referring to rows to columns from CSV filePython 使用从 CSV 文件引用行到列的行来绘制数据
【发布时间】:2017-02-25 01:50:37
【问题描述】:

以下是 CSV 文件中的数据:每个值用“COMMA”分隔

SName,Sub1,Sub2,Sub3, ... ,Sub10  
0 A,40,50,33, ... ,78  
1 B,55,55,33, ... ,66  
2 C,99,100,34, ... ,44

我只想绘制第 0 行 - 即 Student Name: A 从 Sub1 到 Sub 10 的科目分数。图表应由“条形图”、不同颜色的条形图组成!根据学生的分数,颜色应该有所不同。

如果主题的颜色最低,则显示为红色...如果主题的得分最高,则应显示为另一种颜色。不同颜色的其他科目的平均分 ?

我该怎么办?

【问题讨论】:

  • SName 的值和 Sub1 的值之间真的没有逗号吗?
  • 都是逗号分隔的值...CSV文件显然有@BillBell
  • 那么请您编辑您的问题以反映这一点。这不是很明显;一个 csv 文件可以有多种格式。
  • @BillBell 完成!现在你有解决方案了吗?
  • 不知道您是否了解在 SO 上回答问题的人是志愿者?

标签: python python-2.7 pandas numpy matplotlib


【解决方案1】:

许多绘图中最简单的方法可能是从matplotlib gallery 上提供的样本之一开始。在这种情况下,由于我不经常使用 matplotlib,因此我使用其中两个示例提醒自己有关细节。此代码代表解决方案的一部分,因为它不从 csv 读取值。

import matplotlib.pyplot as plt
plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt


# Example data
subjects = ['Sub%s'%_ for _ in range(1,11)]
marks = [51,43,55,60,65,43,78,67,88,44]
minMark=min(marks)
maxMark=max(marks)
colors=['green']*len(marks)
for _ in range(len(colors)):
    if marks[_]==minMark:
        colors[_]='red'
    if marks[_]==maxMark:
        colors[_]='yellow'
y_pos = np.arange(len(subjects))

plt.barh(y_pos, marks, align='center',color=colors)
plt.yticks(y_pos, subjects)
plt.xlabel('marks')
plt.title('Subject Marks for Student A')

plt.show()

使用 csv 文件内容如下:

SName,Sub1,Sub2,Sub3,Sub10  
0,A,40,50,33,78  
1,B,55,55,33,66  
2,C,99,100,34,44

您可以使用如下代码恢复第一行标记:

import csv

first = True
with open('temp2.csv') as csvfile:
    reader = csv.reader(csvfile)
    for line in reader:
        if first:
            first=False
            continue
        marks=line
        break

print (marks)

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 2020-10-17
    • 2017-05-06
    • 2012-11-12
    • 2017-12-12
    • 1970-01-01
    • 2023-03-02
    相关资源
    最近更新 更多