相关疑难解决方法(0)

将x轴移动到matplotlib中的绘图顶部

基于这个关于matplotlib中的热图的问题,我想将x轴标题移动到图的顶部.

import matplotlib.pyplot as plt
import numpy as np
column_labels = list('ABCD')
row_labels = list('WXYZ')
data = np.random.rand(4,4)
fig, ax = plt.subplots()
heatmap = ax.pcolor(data, cmap=plt.cm.Blues)

# put the major ticks at the middle of each cell
ax.set_xticks(np.arange(data.shape[0])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[1])+0.5, minor=False)

# want a more natural, table-like display
ax.invert_yaxis()
ax.xaxis.set_label_position('top') # <-- This doesn't work!

ax.set_xticklabels(row_labels, minor=False)
ax.set_yticklabels(column_labels, minor=False)
plt.show()
Run Code Online (Sandbox Code Playgroud)

但是,调用matplotlib的set_label_position(如上所述)似乎没有达到预期的效果.这是我的输出:

在此输入图像描述

我究竟做错了什么?

python plot data-visualization matplotlib

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

Matplotlib - 标记每个bin

我目前正在使用Matplotlib来创建直方图:

在此输入图像描述

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as pyplot
...
fig = pyplot.figure()
ax = fig.add_subplot(1,1,1,)
n, bins, patches = ax.hist(measurements, bins=50, range=(graph_minimum, graph_maximum), histtype='bar')

#ax.set_xticklabels([n], rotation='vertical')

for patch in patches:
    patch.set_facecolor('r')

pyplot.title('Spam and Ham')
pyplot.xlabel('Time (in seconds)')
pyplot.ylabel('Bits of Ham')
pyplot.savefig(output_filename)
Run Code Online (Sandbox Code Playgroud)

我想让x轴标签更有意义.

首先,这里的x轴刻度似乎限于五个刻度.无论我做什么,我似乎无法改变这一点 - 即使我添加更多xticklabels,它只使用前五个.我不确定Matplotlib如何计算这个,但我认为它是从范围/数据中自动计算的?

有没有什么办法可以提高x-tick标签的分辨率 - 甚至可以提高每个条形码/ bin 的分辨率

(理想情况下,我也希望以微秒/毫秒重新格式化秒数,但这是另一天的问题).

其次,我想要标记每个单独的条形图 - 包含该条形图中的实际数字,以及所有条形图总数的百分比.

最终输出可能如下所示:

在此输入图像描述

Matplotlib有可能吗?

干杯,维克多

python graphing visualization matplotlib histogram

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

在python pandas中构造共生矩阵

我知道如何在R中这样做.但是,pandas中是否有任何函数将数据帧转换为包含两个方面共同计数的nxn共生矩阵.

例如矩阵df:

import pandas as pd

df = pd.DataFrame({'TFD' : ['AA', 'SL', 'BB', 'D0', 'Dk', 'FF'],
                    'Snack' : ['1', '0', '1', '1', '0', '0'],
                    'Trans' : ['1', '1', '1', '0', '0', '1'],
                    'Dop' : ['1', '0', '1', '0', '1', '1']}).set_index('TFD')

print df

>>> 
    Dop Snack Trans
TFD                
AA    1     1     1
SL    0     0     1
BB    1     1     1
D0    0     1     0
Dk    1     0     0
FF    1     0     1

[6 rows x 3 columns]
Run Code Online (Sandbox Code Playgroud)

会屈服:

    Dop …
Run Code Online (Sandbox Code Playgroud)

python statistics pandas

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

如何绘制scikit学习分类报告?

是否可以使用matplotlib scikit-learn分类报告进行绘图?我们假设我打印分类报告如下:

print '\n*Classification Report:\n', classification_report(y_test, predictions)
    confusion_matrix_graph = confusion_matrix(y_test, predictions)
Run Code Online (Sandbox Code Playgroud)

我得到:

Clasification Report:
             precision    recall  f1-score   support

          1       0.62      1.00      0.76        66
          2       0.93      0.93      0.93        40
          3       0.59      0.97      0.73        67
          4       0.47      0.92      0.62       272
          5       1.00      0.16      0.28       413

avg / total       0.77      0.57      0.49       858
Run Code Online (Sandbox Code Playgroud)

我如何"绘制"avobe图表?

python numpy matplotlib scikit-learn

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

在热图中使反向对角线变白

我正在尝试做一些如下图所示的图片, 在此输入图像描述

只需设置反向对角线,就会留下白色.我无法将它们设置为白色.图表采用整数值,我不知道白色对应的整数值.

谢谢!

编辑:

这是代码;

import math
from matplotlib import pyplot as plt
from matplotlib import cm as cm
import pylab
import numpy as np
from matplotlib.collections import LineCollection

class HeatMap:
    def __init__(self, selectedLines):
        self.selectedLines = selectedLines


    def getHeapMap(self):
        figure = plt.figure()

        if len(self.selectedLines) != 0:

            self.map = self.createTestMapData(len(self.selectedLines),                len(self.selectedLines))


            maxValueInMap = self.findMaxValueInMap(self.map)

            x = np.arange(maxValueInMap + 1)
            ys = [x + i for i in x]
            ax = figure.add_subplot(111)
            ax.imshow(self.map, cmap=cm.jet, interpolation='nearest')

            '''
            Left side label of the chart …
Run Code Online (Sandbox Code Playgroud)

python pyqt matplotlib pyqt4

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

使用matplotlib的pyplot在每个单元格中使用文本进行热图

我使用matplotlib.pyplot.pcolor()来绘制matplotlib的热图:

在此输入图像描述

import numpy as np
import matplotlib.pyplot as plt    

def heatmap(data, title, xlabel, ylabel):
    plt.figure()
    plt.title(title)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap='RdBu', vmin=0.0, vmax=1.0)
    plt.colorbar(c)

def main():
    title = "ROC's AUC"
    xlabel= "Timeshift"
    ylabel="Scales"
    data =  np.random.rand(8,12)
    heatmap(data, title, xlabel, ylabel)
    plt.show()

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

有没有办法在每个单元格中添加相应的值,例如:

(来自Matlab的可定制热图)

在此输入图像描述

(%我现在的申请不需要额外的,但我很想知道未来)

matplotlib heatmap

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

使用Pandas数据帧中的值注释热图

我想用一个数据帧传递给下面函数的值来注释热图.我查看了matplotlib.text但是无法在我的热图中以所需的方式从我的数据框中获取值.我已经粘贴了我的函数,用于生成下面的热图,之后是我的数据帧和热图调用的输出.我想从热图中每个单元格中心的数据框中绘制每个值.

生成热图的功能:

import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors

def heatmap_binary(df,
            edgecolors='w',
            #cmap=mpl.cm.RdYlGn,
            log=False):    
    width = len(df.columns)/7*10
    height = len(df.index)/7*10

    fig, ax = plt.subplots(figsize=(20,10))#(figsize=(width,height))

    cmap, norm = mcolors.from_levels_and_colors([0, 0.05, 1],['Teal', 'MidnightBlue'] ) # ['MidnightBlue', Teal]['Darkgreen', 'Darkred']

    heatmap = ax.pcolor(df ,
                        edgecolors=edgecolors,  # put white lines between squares in heatmap
                        cmap=cmap,
                        norm=norm)


    ax.autoscale(tight=True)  # get rid of whitespace in margins of heatmap
    ax.set_aspect('equal')  # ensure heatmap cells are square
    ax.xaxis.set_ticks_position('top')  # put column labels at the …
Run Code Online (Sandbox Code Playgroud)

python text matplotlib heatmap pandas

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

如何使用Bokeh正确创建HeatMap

我正在尝试使用Bokeh而不是matplotlib 复制此问题中显示的HeatMap.我不能说得对.现有的例子并没有帮助我理解我做错了什么.我谦虚的尝试

from bokeh.io import output_notebook; output_notebook()
from bokeh.charts import HeatMap, show
from bokeh.palettes import RdYlGn6
import pandas as pd
import numpy as np

nba = pd.read_csv(urlopen("http://datasets.flowingdata.com/ppg2008.csv"), index_col=0)

# Normalize the data columns and sort.
nba = (nba - nba.mean()) / (nba.max() - nba.min())
nba.sort('PTS', inplace=True)

score = []
for x in nba.apply(tuple):
  score.extend(x)

data = {
  'players': list(nba.index) * len(nba.columns),
  'metric':  list(nba.columns) * len(nba.index),
  'score':   score,
}

hm = HeatMap(data, x='metric', y='players',values='score', title='Fruits', stat=None)
show(hm)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,尽管标题相似, …

python heatmap bokeh

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

用Python画一个网格,不同的值对应不同的颜色

我试图绘制一个网格,其中为每个值绘制相应的颜色。例如:

[[1,1,1,1,1,1,1,1,1],    
 [1,0,0,0,0,0,0,0,1],    
 [1,0,0,0,2,2,0,0,1],    
 [1,0,0,0,2,2,0,0,1],    
 [1,1,1,1,1,1,1,1,1]]
Run Code Online (Sandbox Code Playgroud)

将显示为带有蓝色边框(代表 1)的 9x5 网格,填充黑色(代表 0),底部有一个 2x2 的红色块(代表 2)。

显然这可以完成,imshow但我不知道语法是什么。

预先感谢您的任何帮助!

python grid matplotlib draw imshow

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