小编Mr.*_*. T的帖子

如何在 matplotlib 中将 x 轴作为日期时间的条形图和线图结合起来

我有一个带有 datetimeIndex 的数据帧和两列带有 int 值的数据帧。我想在同一个图上绘制 Col1 作为条形图,将 Col2 作为线图。

重要的功能是在放大时将 x 轴正确标记为日期时间。我认为使用 DateFormatter 的解决方案不起作用,因为我想要动态 xtick 标签。

import matplotlib.pyplot as plt
import pandas as pd
import datetime as dt
import numpy as np

startDate = dt.datetime(2018,1,1,0,0)
nrHours = 144
datetimeIndex = [startDate + dt.timedelta(hours=x) for x in  range(0,nrHours)]

dF = pd.DataFrame(index=datetimeIndex)
dF['Col1'] = np.random.randint(1,3,nrHours)
dF['Col2'] = np.random.randint(3,6,nrHours)

axes = dF[['Col1']].plot(kind='bar')
dF[['Col2']].plot(ax=axes)
Run Code Online (Sandbox Code Playgroud)

看似简单的任务实际上非常具有挑战性。事实上,在网上进行了大量搜索后,我仍然没有找到任何干净的解决方案。

我尝试过使用 pandas 绘图和 matplotlib。主要问题来自条形图,它似乎难以处理日期时间索引(更喜欢整数,在某些情况下它会绘制日期,但采用 Epoch 1970-1-1 样式,相当于 0)。

python matplotlib bar-chart dataframe pandas

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

熊猫:如何用nan保持列的类型?

例如,我有一个dfnan和使用下面的方法来fillna.

import pandas as pd 
a = [[2.0, 10, 4.2], ['b', 70, 0.03], ['x',  ]]
df = pd.DataFrame(a)
print(df)

df.fillna(int(0),inplace=True)
print('fillna df\n',df)
dtype_df = df.dtypes.reset_index()
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

   0     1     2
0  2  10.0  4.20
1  b  70.0  0.03
2  x   NaN   NaN
fillna df
    0     1     2
0  2  10.0  4.20
1  b  70.0  0.03
2  x   0.0  0.00
   col     type
0    0   object
1    1  float64
2    2  float64
Run Code Online (Sandbox Code Playgroud)

实际上,我希望column 1维持类型int …

python dataframe pandas

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

虚空上的seaborn heatmap pandas计算

生成数据框的系列计算,以提供NaN占总行数的百分比,如下所示:

data = df.isnull().sum()/len(df)*100

RecordID          0.000000
ContactID         0.000000
EmailAddress      0.000000
ExternalID      100.000000
Date              0.000000
Name              0.000000
Owner            67.471362
Priority          0.000000
Status            0.000000
Subject           0.000000
Description       0.000000
Type              0.000000
dtype: float64
Run Code Online (Sandbox Code Playgroud)

我热衷于将其表示为seaborn中的热图sns.heatmap(data),吸引读者关注100%和67%的读者,不幸的是我遇到了此错误

IndexError:条件和输入之间的形状不一致(获取​​(12,1)和(12,))

完整回溯:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-17-05db696a3a9b> in <module>()
----> 1 sns.heatmap(data)

~\AppData\Local\Programs\Python\Python36-32\lib\site-packages\seaborn\matrix.py in heatmap(data, vmin, vmax, cmap, center, robust, annot, fmt, annot_kws, linewidths, linecolor, cbar, cbar_kws, cbar_ax, square, xticklabels, yticklabels, mask, ax, **kwargs)
    515     plotter = _HeatMapper(data, vmin, vmax, cmap, center, robust, annot, …
Run Code Online (Sandbox Code Playgroud)

python heatmap dataframe pandas seaborn

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

散景线图:绘制大量线时如何分配颜色

我使用 for 循环在 Bokeh 中创建了多线图(代码如下)。

在输出示例中只有两条曲线。在这种情况下,我可以为每条曲线设置颜色列表。但是,如果我需要绘制大量曲线,如何使用散景调色板之一(例如配对)?我想自动执行此操作,以避免每次增加要绘制的行数时都必须制作颜色列表。

import pandas as pd
import numpy as np
from bokeh.core.properties import value
from bokeh.plotting import figure, show
from bokeh.io import output_notebook
from bokeh.models import ColumnDataSource, CDSView, GroupFilter, HoverTool

from bokeh.palettes import Paired

bokeh_test=pd.read_excel(data, 'bokeh line plot')
display(bokeh_test)


x   y
item        
A   4   0.0000
A   5   0.0000
A   36  39.8879
A   66  46.2022
A   97  32.9306
A   127 25.7896
A   158 21.9209
A   189 18.6405
B   6   4.4775
B   7   1.1710
B   8   0.0000
B …
Run Code Online (Sandbox Code Playgroud)

python palette line-plot bokeh

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

为什么从 numpy 按位左移在不同系统上给出不同的结果?

我在两个不同的系统上使用来自 numpy 的按位运算并得到不同/不一致的结果。经过一番调查,我发现left_shift导致问题的原因。如果我执行以下操作:

xs = [i for i in range(100)]
np.left_shift(xs, xs)
Run Code Online (Sandbox Code Playgroud)

在第一个系统上,我得到:

array([                   0,                    2,                    8,
                         24,                   64,                  160,
                        384,                  896,                 2048,
                       4608,                10240,                22528,
                      49152,               106496,               229376,
                     491520,              1048576,              2228224,
                    4718592,              9961472,             20971520,
                   44040192,             92274688,            192937984,
                  402653184,            838860800,           1744830464,
                 3623878656,           7516192768,          15569256448,
                32212254720,          66571993088,         137438953472,
               283467841536,         584115552256,        1202590842880,
              2473901162496,        5085241278464,       10445360463872,
             21440476741632,       43980465111040,       90159953477632,
            184717953466368,      378231999954944,      774056185954304,
           1583296743997440,     3236962232172544,     6614661952700416,
          13510798882111488,    27584547717644288,    56294995342131200,
         114841790497947648,   234187180623265792,   477381560501272576,
         972777519512027136,  1981583836043018240,  4035225266123964416,
        8214565720323784704, -1729382256910270464, -2882303761517117440,
       -4611686018427387904, -6917529027641081856, -9223372036854775808,
       -9223372036854775808, …
Run Code Online (Sandbox Code Playgroud)

python numpy bit-shift bitwise-operators

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

如何用单独的置信区间分割小提琴图

我怎么能做出这样的小提琴人物呢?我想包括置信区间 在此输入图像描述 我可以使用下面的代码用四边形绘制分割图,但不能绘制均值和置信度。数据可以在这里找到。https://drive.google.com/file/d/18GrncA2GmJd38tVGZZ5yylR6Cf61XsGp/view?usp=sharing

import matplotlib.pyplot as plt
import seaborn as sns

sns.violinplot(x="six.categories", y="non_poor", hue="year", data=df, split=True,
               inner="quart", palette={"2019": "b", "2020": "y"})
sns.despine(left=True)

plt.xticks(np.arange(6),["Nonpoor\nWhite", "Poor\nWhite", "Poor\nBlack", "Nonpoor\nBlack", "Poor\nHispanic", "Nonpoor\nHispanic"])
Run Code Online (Sandbox Code Playgroud)

python seaborn violin-plot

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

Polyfit 返回“nan”,而 x 和 y 在 Python 中没有“nan”或“inf”值

我遇到了 polyfit 的问题,无法找到解决方案。我有一个双对数图,我尝试在其中进行polyfit。“x”和“y”都没有任何“nan”或“inf”值。当我运行 polyfit 时,我得到的只是 nan

  np.polyfit(x,y,1)
Run Code Online (Sandbox Code Playgroud)

结果

  array([nan, nan])
Run Code Online (Sandbox Code Playgroud)

想知道是什么原因。我使用的 x 和 y 大小为 524288,因此很难共享。提前致谢。

python numpy nan

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

将 xlabel 包裹在 Seaborn Plot 中

一直在尝试修改我的情节,以便可以包装 xlabel。
看过类似问题的一些建议。
但我无法在这方面使用它们。
ax.set_xticklabels 代码不会包装标签。
plt.xticks 代码抛出错误 -
AttributeError: 'Text' object has no attribute 'expandtabs'

plt.figure(figsize = (7,5))
ax = sns.countplot(data = df3, x = df3.PaymentMethod, hue = df3.Churn)
#ax.set_xticklabels(ax.get_xticklabels(), ha="right", horizontalalignment = 'center', wrap = True)
plt.xticks([textwrap.fill(label, 10) for label in ax.get_xticklabels()], 
           rotation = 10, fontsize=8, horizontalalignment="center")
Run Code Online (Sandbox Code Playgroud)

具有重叠 xlabel 的绘图图像 在此输入图像描述

python plot matplotlib axis-labels seaborn

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

scipy.curve_fit() 返回多行

我是 python 的新手,并试图使用以下代码来拟合数据集分布。实际数据是一个列表,包含两列——预测市场价格和实际市场价格。我试图使用,scipy.curve_fit()但它给了我在同一个地方绘制的许多线条。任何帮助表示赞赏。

# import the necessary modules and define a func.
from scipy.optimize import curve_fit
from matplotlib import pyplot as plt

def func(x, a, b, c):
    return a * x** b + c

# my data
pred_data = [3.0,1.0,1.0,7.0,6.0,1.0,7.0,4.0,9.0,3.0,5.0,5.0,2.0,6.0,8.0]
actu_data =[ 3.84,1.55,1.15,7.56,6.64,1.09,7.12,4.17,9.45,3.12,5.37,5.65,1.92,6.27,7.63]
popt, pcov = curve_fit(func, pred_data, actu_data)

#adjusting y 
yaj = func(pred_data, popt[0],popt[1], popt[2])

# plot the data
plt.plot(pred_data,actu_data, 'ro', label = 'Data')
plt.plot(pred_data,yaj,'b--', label = 'Best fit')

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

在此处输入图片说明

python matplotlib curve-fitting scipy

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

Python plt.colorbar() 它有什么作用,颜色条上的数字代表什么?

有人可以向我解释颜色条的用途和方式吗?我不明白颜色条的重要性,它显示的数字是什么?颜色条上的数字是什么意思?请向我解释... 数据来自 datacamp:两列显示从 1970 年到 2010 年学习生物学和商业的学生百分比。下面的代码生成了一个 2dhist,但我不明白颜色条标签的含义是什么?是百分比吗??

plt.hist2d(data['Biology'], data['Business'], bins=(5,5))
plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)

图像在这里

python visualization matplotlib

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

Matplotlib如何为直方图的子图添加全局图例

如何为子图中的所有直方图添加全局图例?

下面的代码模仿了一些数据,我希望在图中的某处有一个全局图例。我正在底部思考,但会考虑更好的答案。它可以左对齐、居中或分散。

我如何添加全球图例?我尝试按照此处的fig.legend((v1, v2, v3), ('v1', 'v2', 'v3'), 'lower left')建议使用,但我认为这不适用于直方图。

使用Python 3.8

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
%matplotlib inline

v1=[3,1.1,2,5.2,4.9,2.6,3,0.5]
v2=[6.1,5.2,9.5,4.5]
v3=[0.1,1.4,0.5,1.2]

fig, axes = plt.subplots(4,2, figsize=(6.5,4.0), constrained_layout=True)
fig.suptitle('suptile')

mybins = [0,3,6,9,12]
mylist = [0,1,4,7]
for ii, ax in enumerate(axes.flat):
    if ii in mylist:
        data = [v1,v2,v3]
        colors = ['blue', 'red', 'green']
        labels = ['v1', 'v2', 'v3']
    else:
        data = [v1,v2]
        colors = ['blue', 'red']
        labels = ['v1', 'v2']
    ax.hist(data, color=colors,edgecolor='black', alpha=0.5,
            density=False, cumulative=False, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib legend subplot

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