我有以下代码来生成漂亮的圆环图:
%matplotlib inline
import matplotlib.pyplot as plt
size_of_groups=[12,11,30,3]
colors = ['#F92969','#FACA0C','#17C37B','#D9DFEB']
my_pie,_ = plt.pie(size_of_groups,radius = 1.2,colors=colors)
plt.setp(my_pie, width=0.6, edgecolor='white') #
plt.show()
Run Code Online (Sandbox Code Playgroud)
我没有采用在圆环图中间放置一个圆圈的方法 - 这是因为我需要使绘图的内部透明以用于其他目的。
现在,上面的输出是这样的:

但是,当我更改代码以添加该,autopct="%.1f%%"行时,它会中断,但无论如何都会输出带有标签的饼图(尽管不是甜甜圈):
%matplotlib inline
import matplotlib.pyplot as plt
size_of_groups=[12,11,30,3]
colors = ['#F92969','#FACA0C','#17C37B','#D9DFEB']
my_pie,_ = plt.pie(size_of_groups,radius = 1.2,colors=colors,autopct="%.1f%%")
plt.setp(my_pie, width=0.6, edgecolor='white') #
plt.show()
Run Code Online (Sandbox Code Playgroud)

错误是:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-39-ada97a3edee3> in <module>
13
14 # Create a pieplot
---> 15 my_pie,_ = plt.pie(size_of_groups,radius = 1.2,colors=colors,autopct="%.1f%%")
16
17 #,autopct="%.1f%%"
ValueError: too many values to …Run Code Online (Sandbox Code Playgroud) 所以我想要做的是以下内容:
我在某个文件夹中有 300 多个 CSV。我想要做的是打开每个 CSV 并只取每个的第一行。
我想做的是以下内容:
import os
list_of_csvs = os.listdir() # puts all the names of the csv files into a list.
Run Code Online (Sandbox Code Playgroud)
以上为我生成了一个列表,例如['file1.csv','file2.csv','file3.csv'].
这很好,但我遇到的问题是下一步。我将使用伪代码演示这一点:
import pandas as pd
for index,file in enumerate(list_of_csvs):
df{index} = pd.read_csv(file)
Run Code Online (Sandbox Code Playgroud)
基本上,我希望我的 for 循环遍历我的list_of_csvs对象,并将第一项读取到 df1,第二项读取到 df2 等。但是在尝试执行此操作时我才意识到 -我不知道如何更改在执行时分配的变量通过迭代分配!!!
这就是我提出问题的原因。我设法找到了另一种方法来完成我原来的工作没有问题,但是这个通过交互进行变量分配的问题是我无法找到明确答案的问题!
以下示例代码将生成我将用作示例的圆环图:
import matplotlib.pyplot as plt
%matplotlib inline
# Following should supposedly set the font correctly:
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = ['Muli'] + plt.rcParams['font.sans-serif']
plt.rcParams['font.weight'] = 'extra bold'
size_of_groups=[12,11,30,0.3]
colors = ['#a1daaa','#bbbbb4','#444511','#1afff2']
import matplotlib as mpl
mpl.rcParams['text.color'] = '#273859'
# Create a pieplot
my_pie,texts,_ = plt.pie(size_of_groups,radius = 1.2,colors=colors,autopct="%.1f%%",
textprops = {'color':'w',
'size':15 #, 'weight':"extra bold"
}, pctdistance=0.75, labeldistance=0.7) #pctdistance and labeldistance change label positions.
labels=['High','Low','Normal','NA']
plt.legend(my_pie,labels,loc='lower center',ncol=2,bbox_to_anchor=(0.5, -0.2))
plt.setp(my_pie, width=0.6, edgecolor='white')
fig1 = plt.gcf()
fig1.show()
Run Code Online (Sandbox Code Playgroud)
上面的输出是这样的:

大多数情况下,这很棒。最后我得到了一个漂亮的圆环图!
但还有最后一件事需要巧妙处理 - 当圆环图的部分非常小时(例如 0.6%),我需要将标签移出图表,并可能改为黑色。 …