小编Nab*_*bla的帖子

在 matplotlib 子图中添加一行

我想用 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)

我应该如何在子图中画线?最好有传说 谢谢!

matplotlib legend python-3.x pandas subplot

13
推荐指数
1
解决办法
1万
查看次数

来自按级别分组的多索引pandas数据帧的子图

我如何基于多索引的一个级别从多索引的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做类似的事吗?

python matplotlib multi-index pandas subplot

5
推荐指数
1
解决办法
1799
查看次数

使用 python 从电子表格中提取多个表

我想提取一系列 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 软件读取的,该软件使用它们来识别表格的开始位置。我决定不考虑这些标签来提出其他人可能遇到的更通用的问题。

python excel pandas

5
推荐指数
2
解决办法
1万
查看次数

使用 matplotlib-venn 在维恩图上设置圆圈大小和标签大小

我有几个用 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)

python matplotlib matplotlib-venn

5
推荐指数
1
解决办法
2753
查看次数

如何在 matplotlib_venn 中将 VennDiagram 保存为 PNG 图

使用以下代码,我尝试创建维恩图,然后将其保存为文件。

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 下执行的示例图: 在此处输入图片说明

python graph matplotlib matplotlib-venn

4
推荐指数
1
解决办法
2445
查看次数

如何在plotly (python) sankey中显示图例?

我想绘制一些代表不同物质质量流量的桑基图以供报告。我想用图例来区分这些物质,但我不知道该怎么做。我尝试过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 plotly sankey-diagram

4
推荐指数
1
解决办法
3012
查看次数