我想用 matplotlib 绘制两个图形的子图,并在两者中添加一条水平线。这可能是基本的,但我不知道如何指定应在第一个图中绘制其中一条线,它们最终都在最后一个图中。例如
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
s1= pd.Series(np.random.rand(10))
s2= pd.Series(np.random.rand(10))
fig, axes = plt.subplots(nrows=2,ncols=1)
f1= s1.plot(ax=axes[0])
l1=plt.axhline(0.5,color='black',ls='--')
l1.set_label('l1')
f2= s1.plot(ax=axes[1])
l2=plt.axhline(0.7,color='red',ls='--')
l2.set_label('l2')
plt.legend()
Run Code Online (Sandbox Code Playgroud)
axhline 没有“ax”作为参数,就像 pandas plot 函数那样。所以这会起作用:
l1=plt.axhline(0.5,color='black',ls='--',ax=axes[0])
Run Code Online (Sandbox Code Playgroud)
我阅读了matplotlib 中的示例,并尝试了另一个不起作用的选项(可能有充分的理由)
axes[0].plt.axhline(0.5,color='black',ls='--')
Run Code Online (Sandbox Code Playgroud)
我应该如何在子图中画线?最好有传说 谢谢!
我如何基于多索引的一个级别从多索引的pandas DataFrame中做多个绘图?
我有一个模型的结果,在不同的场景中使用不同的技术,结果可能如下所示:
import numpy as np
import pandas as pd
df=pd.DataFrame(abs(np.random.randn(12,4)),columns=[2011,2012,2013,2014])
df['scenario']=['s1','s1','s1','s2','s2','s3','s3','s3','s3','s4','s4','s4']
df['technology'=['t1','t2','t5','t2','t6','t1','t3','t4','t5','t1','t3','t4']
dfg=df.groupby(['scenario','technology']).sum().transpose()
Run Code Online (Sandbox Code Playgroud)
dfg将拥有每年针对每种方案使用的技术.我想为每个分享图例的场景设一个子图.
如果我只是使用参数subplots = True,那么它会绘制所有可能的组合(12个子图)
dfg.plot(kind='bar',stacked=True,subplots=True)
Run Code Online (Sandbox Code Playgroud)
基于这种反应,我更接近我所寻找的.
f,a=plt.subplots(2,2)
fig1=dfg['s1'].plot(kind='bar',ax=a[0,0])
fig2=dfg['s2'].plot(kind='bar',ax=a[0,1])
fig2=dfg['s3'].plot(kind='bar',ax=a[1,0])
fig2=dfg['s3'].plot(kind='bar',ax=a[1,1])
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)
但结果并不理想,每个子情节都有不同的传说......这使得它很难阅读.必须有一种更简单的方法从多索引的数据帧中进行子图...谢谢!
EDIT1:Ted Petrou使用seaborn factorplot提出了一个很好的解决方案,但我有两个问题.我已经定义了一个样式,我宁愿不使用seaborn样式(一个解决方案可以改变seaborn的参数).另一个问题是我想使用堆积条形图,这需要相当多的额外调整.我可以用Matplotlib做类似的事吗?
我想提取一系列 Excel 电子表格的多个表,其中某些工作表可能包含多个表,以将表单独存储为例如 csv 文件。该表可能是这样的:
如果我使用 pandas read_excel 读取它
import pandas as pd
pd.read_excel('table_example.xlsx',header=None)
Run Code Online (Sandbox Code Playgroud)
我会得到这样的东西:
我怎样才能提取不同的表?就我而言,表具有 NaN 值,这可能会带来额外的复杂性。
[EDIT1] 可以使用 pandas 生成类似于 Excel 表格的内容:
df=pd.DataFrame(np.nan,index=range(0,10),columns=range(0,10))
df.iloc[1,2:5]=['t1h1','t1h2','t1h3']
df.iloc[2:5,2:5]=np.random.randn(3,3)
df.iloc[6,3:7]=['t2h1','t2h2','t2h3','t2h4']
df.iloc[7:9,3:7]=np.random.randn(2,4)
Run Code Online (Sandbox Code Playgroud)
我尝试使用内置的 pandas 函数找到表的限制:
df[df.isnull().all(axis=1)]
Run Code Online (Sandbox Code Playgroud)
我可以使用第一行和第二行设置水平划分,也许可以进行第一次分割,但我不知道如何选择已识别行上方或下方的单元格。或者即使这是最方便的方法。
免责声明:在我的例子中,表格在标题上方的行中总是有一个标签,这是因为这些表格是由非 python 软件读取的,该软件使用它们来识别表格的开始位置。我决定不考虑这些标签来提出其他人可能遇到的更通用的问题。
我有几个用 matplotlib-venn 库创建的不同的维恩图,它们共享至少一组。我希望该集合的圆圈大小相同,因此它们具有可比性。我还想更改标签字体的大小,但我还不明白如何从 matplotlib-venn 函数中获取它。我怎么能做到?
集合的一个例子可能是这样的:
from matplotlib_venn import venn3
s1=set('abracadabra')
s2=set('alakazam')
s3=set('stackoverflow')
s4=set('hocus pocus')
v_test1=venn3([s1,s2,s3],('set1','set2','set3'))
v_test1=venn3([s1,s3,s4],('set1','set3','set4'))
Run Code Online (Sandbox Code Playgroud) 使用以下代码,我尝试创建维恩图,然后将其保存为文件。
import matplotlib
from matplotlib_venn import venn2
set1 = set(['A', 'B', 'C', 'D'])
set2 = set(['B', 'C', 'D', 'E'])
plt = venn2([set1,set2],('Set1','Set2'))
plt.savefig('test.png')
Run Code Online (Sandbox Code Playgroud)
但它给了我错误。正确的做法是什么?
这是我在 Ipython 下执行的示例图:

我想绘制一些代表不同物质质量流量的桑基图以供报告。我想用图例来区分这些物质,但我不知道该怎么做。我尝试过showlegend但没有成功
import plotly.graph_objects as go
fig = go.Figure(data=[go.Sankey(
node = dict(
pad = 15,
thickness = 20,
line = dict(color = "black", width = 0.5),
label = ['household','industry','waste'],
color = "blue"
),
link = dict(
source = [0,1,0,1], # indices correspond to labels, eg A1, A2, A2, B1, ...
target = [2,2,2,2],
value = [7190,2074,4483,74.50],
label = ['aluminium','aluminium','copper','copper'],
color = ['#d7d6d6','#d7d6d6','#f3cf07','#f3cf07']
))])
fig.update_layout(showlegend=True)
fig.show()
Run Code Online (Sandbox Code Playgroud)
python ×5
matplotlib ×4
pandas ×3
subplot ×2
excel ×1
graph ×1
legend ×1
multi-index ×1
plotly ×1
python-3.x ×1