相关疑难解决方法(0)

为什么许多例子在Matplotlib/pyplot/python中使用"fig,ax = plt.subplots()"

我正在学习matplotlib通过学习示例来学习,并且在创建单个绘图之前,许多示例似乎包括如下所示的行...

fig, ax = plt.subplots()
Run Code Online (Sandbox Code Playgroud)

这里有些例子...

我看到这个函数用了很多,尽管这个例子只是试图创建一个图表.还有其他一些优势吗?官方演示subplots()也用于f, ax = subplots创建单个图表时,它之后只引用了ax.这是他们使用的代码.

# Just a figure and one subplot
f, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')
Run Code Online (Sandbox Code Playgroud)

python plot visualization matplotlib

217
推荐指数
5
解决办法
14万
查看次数

用户警告:FixedFormatter 只能与 FixedLocator 一起使用

我长期以来一直使用小子程序来格式化我正在绘制的图表的轴。几个例子:

def format_y_label_thousands(): # format y-axis tick labels formats
    ax = plt.gca()
    label_format = '{:,.0f}'
    ax.set_yticklabels([label_format.format(x) for x in ax.get_yticks().tolist()])

def format_y_label_percent(): # format y-axis tick labels formats
    ax = plt.gca()
    label_format = '{:.1%}'
    ax.set_yticklabels([label_format.format(x) for x in ax.get_yticks().tolist()])
Run Code Online (Sandbox Code Playgroud)

但是,在昨天更新 matplotlib 后,我在调用这两个函数中的任何一个时收到以下警告:

UserWarning: FixedFormatter should only be used together with FixedLocator
  ax.set_yticklabels([label_format.format(x) for x in ax.get_yticks().tolist()])
Run Code Online (Sandbox Code Playgroud)

出现这种警告的原因是什么?我无法弄清楚查看 matplotlib 的文档。

python matplotlib

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

Matplotlib:如何强制整数刻度标签?

我的python脚本使用matplotlib绘制x,y,z数据集的2D"热图".我的x和y值代表蛋白质中的氨基酸残基,因此只能是整数.当我放大绘图时,它看起来像这样:

带有浮动刻度线的2D热图

正如我所说,xy轴上的浮点值对我的数据没有意义,因此我希望它看起来像这样: 在此输入图像描述

任何想法如何实现这一目标?这是生成图的代码:

def plotDistanceMap(self):
    # Read on x,y,z
    x = self.currentGraph['xData']
    y = self.currentGraph['yData']
    X, Y = numpy.meshgrid(x, y)
    Z = self.currentGraph['zData']
    # Define colormap
    cmap = colors.ListedColormap(['blue', 'green', 'orange', 'red'])
    cmap.set_under('white')
    cmap.set_over('white')
    bounds = [1,15,50,80,100]
    norm = colors.BoundaryNorm(bounds, cmap.N)
    # Draw surface plot
    img = self.axes.pcolor(X, Y, Z, cmap=cmap, norm=norm)
    self.axes.set_xlim(x.min(), x.max())
    self.axes.set_ylim(y.min(), y.max())
    self.axes.set_xlabel(self.currentGraph['xTitle'])
    self.axes.set_ylabel(self.currentGraph['yTitle'])
    # Cosmetics
    #matplotlib.rcParams.update({'font.size': 12})
    xminorLocator = MultipleLocator(10)
    yminorLocator = MultipleLocator(10)
    self.axes.xaxis.set_minor_locator(xminorLocator)
    self.axes.yaxis.set_minor_locator(yminorLocator)
    self.axes.tick_params(direction='out', length=6, width=1)
    self.axes.tick_params(which='minor', direction='out', length=3, width=1)
    self.axes.xaxis.labelpad = 15 …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib

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

如何在python中隐藏ticks标签但是保持ticks到位?

我想在我创建的绘图上隐藏我的刻度标签,但保持这个刻度本身(轴上的小标记).例如,当我尝试使用我在此处找到的内容时,整个刻度线将被删除,而不仅仅是标签.我怎样才能删除标签呢?

python axis matplotlib labels

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

如何在matplotlib python中设置x轴值?

图形

我想用matplotlib绘制这个图.我写了代码,但它没有改变x轴值.

import matplotlib.pyplot as plt
x = [0.00001,0.001,0.01,0.1,0.5,1,5]
y = [0.945,0.885,0.893,0.9,0.996,1.25,1.19]
plt.xlim(0.00001,5)
plt.ylim(0.8,1.4)
plt.plot(x, y, marker='o', linestyle='--', color='r', 
label='Square') 
plt.xlabel('x')
plt.ylabel('y') 
plt.title('compare')
plt.legend() 
plt.show()
Run Code Online (Sandbox Code Playgroud)

如何使用matplotlib绘制给定图形的蓝线?

python matplotlib

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

如何在seaborn图中设置x轴刻度标签?

我无法为 seaborn 线图正确设置 x 轴刻度标签。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.DataFrame({'a':np.random.rand(8),'b':np.random.rand(8)})
sns.set(style="darkgrid")
g = sns.lineplot(data=df)
g.set_xticklabels(['2011','2012','2013','2014','2015','2016','2017','2018'])
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

x 轴上的年份未正确对齐。

python seaborn

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

Matplotlib 中的非线性第二轴

我想知道如果没有任何解析公式,是否有一种方法可以在 Matplotlib 中添加第二个非线性 x 轴。或者简化是否有办法为原始 x 轴中的每个数字创建不同的标签。下图解释了我正在寻找的内容。不幸的是,类似的问题之前已经被问过,但没有得到解答。

在此输入图像描述

python plot matplotlib axis-labels

6
推荐指数
1
解决办法
1729
查看次数

仅针对有数据的时期绘制熊猫日内时间序列

我有一系列的日内测量。仅在工作日的白天进行测量。当我绘制数据时,pandas 将 xaxis 扩展到整个时间范围,因此该图显示了数据间隙

dfb.loc[:,("value", "exp_1")].plot()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我可以告诉 pandas/matplotlib 忽略索引并且绘图很好,但我想在 x 轴上显示日期

    dfb.loc[:,("value", "exp_1")].plot(ignore_index=True)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我还尝试用我的索引定义 xticks,但这导致第一个图表的 x 轴描述混乱

    dfb.loc[:,("value", "exp_1")].plot(xticks=dfb.index)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

有没有办法在保持日期的同时获得像第二个图这样的图?

编辑:这是数据和情节的一个子集

在此处输入图片说明

python matplotlib pandas

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

Seaborn的histrogram bin宽度没有扩展到bin标签

这是我上一个问题的另一个问题.我通过以下代码使用facetgrid打印直方图.

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt

titanic = sns.load_dataset("titanic")
g= sns.FacetGrid(titanic, col ='survived', size = 3, aspect = 2)
g.map(plt.hist, 'age', color = 'r'), plt.show()
plt.show()
Run Code Online (Sandbox Code Playgroud)

我让seaborn决定垃圾箱标签/值,这就是我想出的

在此输入图像描述

我注意到条形本身并没有一直延伸到标签.所以0-10标签中的第一个条似乎延伸到大约8,而不是完全延伸到10.做一个快速value_count(除非我弄错了),表明第一个条实际上只包括出现到8岁.

然后,我尝试通过此代码更改要包含的容器数量:

g.map(plt.hist, 'age', bins =8, color = 'r'), plt.show()
Run Code Online (Sandbox Code Playgroud)

但左边的图表仍然没有看到. 在此输入图像描述

python matplotlib histogram seaborn

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

Matplotlib:自动修改轴标签

我知道可以通过手动设置来更改轴标签。(例如:修改刻度标签文本

然而,这显然只有在你知道你想要什么标签的情况下才有效,但对我来说情况并非如此。

这是我想要完成的示例:我有两个 numpy 数组:x包含 1 到 366 之间的数字(但不一定是全部),代表 2016 年的天数。“y”包含其他一些数字。我想制作“y”与“x”的散点图:

import numpy as np
import matplotlib.pyplot as plt
x = np.array([27, 38, 100, 300])
y = np.array([0.5, 2.5, 1.0, 0.8])
plt.scatter(x, y)
Run Code Online (Sandbox Code Playgroud)

不出所料,这会生成一个刻度为 0、50、100、...、350 的图表。我想将这些刻度标签更改为各个日期。(例如,50 处的刻度线将被标记为“二月 19 日”之类的内容。)假设我有一个tick_to_date可以将数字 0 转换为日期字符串的函数,这样我就可以轻松手动更改图表中的所有刻度线。(如果您需要占位符功能tick_to_date = lambda x: ("day " + str(x)):)

ax = plt.gca()
ax.set_xticklabels([tick_to_date(tick.get_text()) for tick in ax.get_xticklabels()])
Run Code Online (Sandbox Code Playgroud)

然而,这只会执行一次。如果我现在放大或执行任何更改刻度的操作,新的刻度标签将不会是我想要的。

理想情况下,我不会手动设置标签,而是告诉轴始终使用我自己的tick_to_date函数转换刻度标签。或者,每次刻度线更改时都调用上面的代码行,但我不确定这是否会很好地工作。其中任何一个可能/可行/愉快可用吗?

python matplotlib

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