相关疑难解决方法(0)

在 matplotlib 中交互式添加和删除散点

这是我想解决的问题: 我希望能够通过单击绘图以交互方式(i)删除散点(灰点),(ii)添加新的散点。

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots(figsize=(16,4))
a = np.sin(range(100))*np.random.normal(20,10,100)
b = [ 5, 15, 25, 30, 40, 50, 75, 85]

aa = plt.plot(range(len(a)),a,color='red')
bb = plt.scatter(b,a[b],color='grey',s=50)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

python animation matplotlib event-handling python-interactive

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

使Label,bbox或axes.text的边框与python matplotlib中的Graph的刺齐平

对于某些手稿,我需要将我的图表标签准确地放置在右上角或左上角。标签需要一个边框,边框的厚度应与图形的刺相同。目前我这样做是这样的:

import matplotlib.pyplot as plt
import numpy as np
my_dpi=96
xposr_box=0.975 
ypos_box=0.94
nrows=3
Mytext="label"
GLOBAL_LINEWIDTH=2
fig, axes = plt.subplots(nrows=nrows, sharex=True, sharey=True, figsize=
               (380/my_dpi, 400/my_dpi), dpi=my_dpi)
fig.subplots_adjust(hspace=0.0001)
colors = ('k', 'r', 'b')
for ax, color in zip(axes, colors):
    data = np.random.random(1) * np.random.random(10)
    ax.plot(data, marker='o', linestyle='none', color=color)

for ax in ['top','bottom','left','right']:
    for idata in range(0,nrows):
        axes[idata].spines[ax].set_linewidth(GLOBAL_LINEWIDTH)


axes[0].text(xposr_box, ypos_box , Mytext, color='black',fontsize=8,
             horizontalalignment='right',verticalalignment='top', transform=axes[0].transAxes,
             bbox=dict(facecolor='white', edgecolor='black',linewidth=GLOBAL_LINEWIDTH)) 

plt.savefig("Label_test.png",format='png', dpi=600,transparent=True)
Run Code Online (Sandbox Code Playgroud)

图片1

所以我用参数控制盒子的位置:

xposr_box=0.975 
ypos_box=0.94
Run Code Online (Sandbox Code Playgroud)

如果更改图的宽度,则框的位置也会更改,但是框的顶部和右侧(或左侧)脊线应始终直接位于图形刺的顶部:

import matplotlib.pyplot as plt
import numpy as np
my_dpi=96
xposr_box=0.975 …
Run Code Online (Sandbox Code Playgroud)

python text label matplotlib

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

Seaborn 中的图例重叠绘图区域

在此输入图像描述

我使用seaborn制作了上面的图,但我无法将图例正确放置在图之外。请注意,图例在图像右侧被截断。这是真实的样子,我没有手动剪。这是我正在使用的代码:

sns.lineplot(x="Time", y='Anomaly', style='country', hue='region', size='area', sizes=(1., 4), data=df)
# Put the legend out of the figure
plt.subplots_adjust(right=0.2)
plt.legend(bbox_to_anchor=(.95, 1), loc=2, borderaxespad=0.)
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)

- 编辑:

这是复制此问题的数据: https://www.dropbox.com/s/w4gd447e22zb5yk/subset.csv ?dl=0

python pandas seaborn

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

Matplotlib:如何水平显示图例元素?

我想指定图例是垂直显示还是水平显示。我的意思不是说Matplotlib图例垂直旋转中描述的图例文本。我的实际案例包括使用小部件指定的任意数量的系列。但是以下示例代表了挑战的要点:

片段:

# Imports
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# data
np.random.seed(123)
x = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
y = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
z = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
df = pd.concat([x,y,z], axis = 1)

# plot 
ax = plt.subplot()
for col in (df.columns):
    plt.plot(df[col])
plt.legend(loc="lower left")
plt.xticks(rotation=90)
plt.show()
Run Code Online (Sandbox Code Playgroud)

情节:

在此处输入图片说明

默认布局似乎是垂直的。查看help(ax.legend)文档的细节,似乎没有一种直接的方法可以将其更改为水平。还是在那里?


编辑-所需的图例:(使用MS Paint)

在此处输入图片说明

python matplotlib

5
推荐指数
3
解决办法
917
查看次数

如何在matplotlib中的子图下方添加图例?

我正在尝试在 3 列子图下方添加图例。

我尝试了以下方法:

fig, ax = plt.subplots(ncols=3)
ax[0].plot(data1)
ax[1].plot(data2)
ax[2].plot(data3)

ax_sub = plt.subplot(111)
box = ax_sub.get_position()
ax_sub.set_position([box.x0, box.y0 + box.height * 0.1,box.width, box.height * 0.9])
ax_sub.legend(['A', 'B', 'C'],loc='upper center', bbox_to_anchor=(0.5, -0.3),fancybox=False, shadow=False, ncol=3)
plt.show()
Run Code Online (Sandbox Code Playgroud)

然而,这只会创建一个空帧。当我注释掉 ax_sub 部分时,我的子图显示得很好(但没有图例......)...

非常感谢!

这与How to put the legend out of the plot密切相关

python matplotlib legend subplot

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

将matplotlib子图图形保存到图像文件

我是新来的matplotlib,正在lim步。就是说,我没有找到这个问题的明显答案。

我有一个散点图,希望按组进行着色,看起来像通过循环绘制滚动方式

这是我的可复制示例,基于上面的第一个链接:

import matplotlib.pyplot as plt
import pandas as pd
from pydataset import data

df = data('mtcars').iloc[0:10]
df['car'] = df.index

fig, ax = plt.subplots(1)
plt.figure(figsize=(12, 9))
for ind in df.index:
    ax.scatter(df.loc[ind, 'wt'], df.loc[ind, 'mpg'], label=ind)
ax.legend(bbox_to_anchor=(1.05, 1), loc=2)
# plt.show()
# plt.savefig('file.png')
Run Code Online (Sandbox Code Playgroud)

取消注释会plt.show()产生我想要的东西:

好情节

到处搜索,看起来就像plt.savefig()是保存文件的方式。如果我重新注释掉plt.show()plt.savefig()改为运行,则会得到空白的白色图片。这个问题,暗示这是由于show()之前致电引起的savefig(),但我已将其完全注释掉了。另一个问题有一条评论,建议我可以ax直接保存该对象,但这切断了我的图例:

切碎的传说

相同的问题也有替代方法使用fig.savefig()。我得到同样的传说。

这个问题,这似乎有关,但我不密谋DataFrame直接,所以我不知道如何应用答案(这里dtf …

python matplotlib figure

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

如何将图例移动到海图散点图之外?

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
sns.set(style="darkgrid")

g = sns.scatterplot(x="Area", y="Rent/Sqft", hue="region", style="availability", data=df)
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到以下图。

在此处输入图片说明

我想将图例移出情节。我用谷歌搜索并尝试了以下

g.legend(loc='right', bbox_to_anchor=(1.25, 0.5), ncol=1)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是我没有任何输出。而且,我无法理解对象plt如何连接到我的sns对象

我正在使用Jupyter Notebook,Python 3.6和Seaborn 0.9.0。

python matplotlib scatter-plot seaborn

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

Python seaborn:无法使我的图表看起来像 Excel 图表

我有一个如下表,它存储在名为“data”的 pandas 数据框中。

第1栏 设备1 事件发生率% % 事件距离 % 非事件分布 % 总分布
0 安卓 3.08 27.3 32.96 32.75
1 Chrome操作系统 4.05 0.47 0.42 0.43
2 铬操作系统 9.95 0.23 0.08 0.09
3 Linux 2.27 0.05 0.09 0.09
4 苹果系统 6.43 4.39 2.45 2.52
5 其他的 2.64 7.41 10.48 10.36
6 视窗 5.7 15.89 10.08 10.3
7 iOS系统 3.76 44.26 43.44 43.47

我正在尝试创建一个所需的seaborn/matplot图表,如下所示,它是在Excel中创建的。

在此输入图像描述

这是我的Python代码:

feature = 'Device1'
fig, ax1 = plt.subplots(figsize=(10,6))
color = 'tab:blue'
title = 'Event rate by ' + feature …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas seaborn

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

Matplotlib:字幕位置错误,图例不可见

我有五个列表,我打算在两个单独的子图中绘制.在子图1中我想要列表1,2,3和4; 在子图2中我想要列表4和5.这些是列表和event_index用于设置x label.

event_index=['event 1','event 2','event 3','event 4','event 5','event 6','event 7','event 8','event 9','event 10']
list1 = [0.7,0.8,0.8,0.9,0.8,0.7,0.6,0.9,1.0,0.9]
list2 = [0.2,0.3,0.1,0.0,0.2,0.1,0.3,0.1,0.2,0.1]
list3 = [0.4,0.6,0.4,0.5,0.4,0.5,0.6,0.4,0.5,0.4]
list4 = [78,87,77,65,89,98,74,94,85,73]
list5 = [16,44,14,55,34,36,76,54,43,32]
Run Code Online (Sandbox Code Playgroud)

为了生成两个子图,我使用以下代码:

fig = plt.figure() #Creates a new figure
ax1 = fig.add_subplot(211) #First subplot: list 1,2,3, and 4
ax2 = ax1.twinx() #Creates a twin y-axis for plotting the values of list 4
line1 = ax1.plot(list1,'bo-',label='list1') #Plotting list1
line2 = ax1.plot(list2,'go-',label='list2') #Plotting list2
line3 = ax1.plot(list3,'ro-',label='list3') #Plotting list3
line4 …
Run Code Online (Sandbox Code Playgroud)

python matplotlib subtitle subplot

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

bbox_to_anchor() 函数的参数

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    ax.plot(x, i * x, label='$y = %ix$' % i)

ax.legend(bbox_to_anchor=(1.1, 1.05))

plt.show()
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我遇到了将图例置于任意位置的函数 bbox_to_anchor 。我无法理解该函数的前两个参数,所有文献都说是归一化轴参数。任何机构都可以解释它们是什么以及如何操纵它们吗?

python matplotlib legend-properties

3
推荐指数
2
解决办法
8114
查看次数