小编Pau*_*l H的帖子

如何为z = f(x,y)绘制平滑的2D颜色图

我正在尝试使用matplotlib 绘制2D场数据.所以基本上我想要类似的东西:

在此输入图像描述

在我的实际情况中,我将数据存储在我的硬盘上的文件中.但是为简单起见,考虑函数z = f(x,y).我想要一个平滑的2D绘图,其中z使用颜色可视化.我使用以下代码行管理绘图:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 21)
y = np.linspace(-1, 1, 21)
z = np.array([i*i+j*j for j in y for i in x])

X, Y = np.meshgrid(x, y)
Z = z.reshape(21, 21)

plt.pcolor(X, Y, Z)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,我获得的情节非常粗糙.是否有一种非常简单的方法来平滑情节?我知道surface情节可能类似,但是,那些是3D.我可以改变相机角度以获得2D表示,但我确信有一种更简单的方法.我也尝试了imshow但是我必须考虑graphic原点位于左上角的坐标.

问题解决了

我设法解决了我的问题:

plt.imshow(Z,origin='lower',interpolation='bilinear')

python plot matplotlib

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

从多索引Dataframe中删除特定行

我有一个多索引数据框,如下所示:

 start      grad
 1995-96    1995-96 15  15  
            1996-97 6   6   
            2002-03 1   1   
            2007-08 1   1   
Run Code Online (Sandbox Code Playgroud)

我想降低第一级的特定值(级别= 0).在这种情况下,我想放弃第一个索引中1995-96的所有内容.

python pandas

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

Matplotlib:散点图中的垂直线

我在这里发布了相当数量的代码,它位于这篇文章的底部.该代码打开了一个带有各种按钮和字段等的tkinter GUI.它还使用matplotlib在最底部显示一个图形.我知道这不是最好用的库,但我不知道其他人如何使用tkinter.所以我理想的是暂时坚持使用matplotlib.

对于图表,我希望每个数据点都是从[x,y]坐标到[x,0]的垂直线.显而易见的答案是使用条形图,条形图为1,我试过这个,但绘图速度比散点图慢很多.

我一直想弄清楚的是,是否有可能只使用这里使用的散点图方法,垂直线绘制到y = 0.这可能吗?

或者我应该废弃尝试使用matplotlib并使用pandas或PyQtGraph.如果是这种情况,是否有任何教程显示如何做到这一点?我试图找到一些但没有运气.

任何帮助将非常感激.我正在使用python包使用python 3.3.

在此输入图像描述

import numpy
from decimal import *
import tkinter as tk
import numpy as np
from tkinter import *
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
from tkinter import ttk
import tkinter.scrolledtext as tkst
import spectrum_plot_2 as specplot
import sequencer as seq

class Plot:
    def __init__(self, master, data):

        self.x = np.array(data.spectrum[0])
        self.y = np.array(data.spectrum[1])

        # Create a container
        self.frame = tk.Frame(master)

        self.fig = Figure()
        self.ax = self.fig.add_subplot(111)
        self.line = self.ax.plot(self.x, self.y, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

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

熊猫:自某个日期以来经过的天数

我有一个带有“日期”列的数据框,其中包含约 200 个元素,格式为 yyyy-mm-dd。

我想为每个元素计算自 2001 年 11 月 25 日以来经过的天数,并将这些经过天数的列添加到数据框中。

我知道 to_datetime() 函数,但不知道如何实现。

python date dataframe pandas

6
推荐指数
2
解决办法
7356
查看次数

将pandas multi-index转换为pandas时间戳

我想一个转换开拆的,多索引的数据帧回大熊猫日期时间指数.

我的原始数据框的索引,即多索引和取消堆栈之前的索引如下所示:

In [1]: df1_season.index
Out [1]: 

<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-01 02:00:00, ..., 2014-07-31 23:00:00]
Length: 1472, Freq: None, Timezone: None
Run Code Online (Sandbox Code Playgroud)

然后我应用多索引和取消堆栈,所以我可以将年度数据绘制在彼此之上,如下所示:

df_sort = df1_season.groupby(lambda x: (x.year, x.month, x.day, x.hour)).agg(lambda s: s[-1])
df_sort.index = pd.MultiIndex.from_tuples(df_sort.index, names=['Y','M','D','H'])
unstacked = df_sort.unstack('Y')
Run Code Online (Sandbox Code Playgroud)

我五月前两天的数据框架如下所示:

In [2]: unstacked
Out [2]:

          temp        season        
Y        2013  2014    2013    2014
M D  H                             
5 1  2   24.2  22.3  Summer  Summer
     8   24.1  22.3  Summer  Summer
     14  24.3  23.2  Summer …
Run Code Online (Sandbox Code Playgroud)

plot datetime dataframe pandas

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

Seaborn对图和NaN值

我正在尝试理解为什么失败了,即使文档说:

dropna:布尔值,可选在绘制之前从数据中删除丢失的值。

from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
sns.__version__
# '0.7.dev'
# generate an example DataFrame
a = pd.DataFrame(data={
    'a': np.random.normal(size=(100,)),
    'b': np.random.lognormal(size=(100,)),
    'c': np.random.exponential(size=(100,))})
sns.pairplot(a) # this works as expected
# snip
b = a.copy()
b.iloc[5,2] = np.nan # replace one value in col 'c' by a NaN
sns.pairplot(b) # this fails with error 
                # "AttributeError: max must be larger than min in range parameter."
                # in …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas seaborn

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

重新排序熊猫数据透视表中的列

我有一个使用 pivot_table 方法创建的 Pandas 数据框。它的结构如下:

import numpy as np
import pandas 

datadict = {
 ('Imps', '10day avg'): {'All': '17,617,872', 'Crossnet': np.nan, 'N/A': '17,617,872'},
 ('Imps', '30day avg'): {'All': '17,302,111', 'Crossnet': '110','N/A': '18,212,742'},
 ('Imps', '3day avg'): {'All': '8,029,438', 'Crossnet': '116', 'N/A': '8,430,904'},
 ('Imps', 'All'): {'All': '14,156,666', 'Crossnet': '113', 'N/A': '14,644,823'},
 ('Spend', '10day avg'): {'All': '$439', 'Crossnet': np.nan, 'N/A': '$439'},
 ('Spend', '30day avg'): {'All': '$468', 'Crossnet': '$0', 'N/A': '$492'},
 ('Spend', '3day avg'): {'All': '$209', 'Crossnet': '$0', 'N/A': '$219'},
 ('Spend', 'All'): {'All': '$368', 'Crossnet': …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

转置多列Pandas数据帧

我正在尝试重塑数据帧,但我无法得到我需要的结果.数据框如下所示:

    m   r   s   p   O       W       N         
    1   4   3   1   2.81    3.70    3.03  
    1   4   4   1   2.14    2.82    2.31  
    1   4   5   1   1.47    1.94    1.59  
    1   4   3   2   0.58    0.78    0.60  
    1   4   4   2   0.67    0.00    0.00
    1   4   5   2   1.03    2.45    1.68
    1   4   3   3   1.98    1.34    1.81
    1   4   4   3   0.00    0.04    0.15
    1   4   5   3   0.01    0.00    0.26
Run Code Online (Sandbox Code Playgroud)

我需要重塑数据帧,所以它看起来像这样:

    m   r   s   p   O       W       N      p …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

将背景颜色图的大小设置为seaborn jointplot中轴的大小

根据这个例子,我使用seaborn创建情节.

import numpy as np
import pandas as pd
import seaborn as sns
sns.set(style="white")

rs = np.random.RandomState(5)
mean = [0, 0]
cov = [(1, .5), (.5, 1)]
x1, x2 = rs.multivariate_normal(mean, cov, 500).T
x1 = pd.Series(x1, name="$X_1$")
x2 = pd.Series(x2, name="$X_2$")

g = sns.jointplot(x1, x2, kind="kde", size=7, space=0)
Run Code Online (Sandbox Code Playgroud)

但是,当我将最后一行代码更改为

g = sns.jointplot(x1, x2, kind="kde", size=7, space=0, xlim=(-5,5), ylim=(-5,5))
Run Code Online (Sandbox Code Playgroud)

背景颜色未正确更改: 在此输入图像描述

我如何修复背景颜色以填充整个情节?

python seaborn

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

设置颜色条以在 matplotlib 中显示超出数据范围的值

我正在尝试创建一个图形,其中颜色条将超出数据范围(高于数据的最大值)。最终目的是我需要绘制一系列模型输出的图像(随着时间的推移),每个小时都存储在一个单独的文件中。我希望所有图形的颜色条都相同,以便它们可以加入动画。

这是一个示例脚本:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0, 360, 1.5)
y = np.arange(-90, 90, 1.5)
lon, lat = np.meshgrid(x, y)
noise = np.random.random(lon.shape) # values in range [0, 1)

fig = plt.figure()
ax = fig.add_subplot(111)
plt.hold(True)
plt.contourf(lon, lat, noise)
plt.colorbar()
Run Code Online (Sandbox Code Playgroud)

这会产生下图:

在此处输入图片说明

我一直在尝试使用我在网上找到的两种方法将颜色条的限制设置为数据范围之外的值(例如,从 -1. 到 2.):

在绘图线内设置 vmin=-1 和 vmax=2:

fig = plt.figure()
ax = fig.add_subplot(111)
plt.hold(True)
plt.contourf(lon, lat, noise, vmin=-1., vmax=2.)
plt.colorbar()
Run Code Online (Sandbox Code Playgroud)

这似乎只更改显示的颜色,因此颜色图中的第一种颜色将对应于 -1,最后一种颜色对应于 2,但它不会扩展颜色条以显示这些值(下面链接中的左图)。

另一种是尝试在颜色栏中强制执行刻度以扩展到该范围:

fig = plt.figure()
ax = fig.add_subplot(111)
plt.hold(True)
plt.contourf(lon, lat, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib colorbar

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

标签 统计

python ×9

pandas ×6

matplotlib ×4

dataframe ×2

plot ×2

seaborn ×2

colorbar ×1

date ×1

datetime ×1