小编Ada*_*ser的帖子

如何在matplotlib中使用imshow将NaN值绘制为特殊颜色?

我试图在matplotlib中使用imshow将数据绘制为热图,但是一些值是NaN.我希望将NaN渲染为色彩映射中找不到的特殊颜色.

例:

import numpy as np
import matplotlib.pyplot as plt
f = plt.figure()
ax = f.add_subplot(111)
a = np.arange(25).reshape((5,5)).astype(float)
a[3,:] = np.nan
ax.imshow(a, interpolation='nearest')
f.canvas.draw()
Run Code Online (Sandbox Code Playgroud)

结果图像出乎意料地全是蓝色(喷射色图中的最低颜色).但是,如果我这样做的情节:

ax.imshow(a, interpolation='nearest', vmin=0, vmax=24)
Run Code Online (Sandbox Code Playgroud)

- 然后我得到了更好的东西,但是NaN值被绘制成与vmin相同的颜色......是否有一种优雅的方式可以设置NaN用特殊颜色绘制(例如:灰色或透明)?

python matplotlib nan

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

如何在matplotlib中创建一个可拖动的图例?

我在matplotlib中的轴对象上绘制了一个图例,但声称将其置于智能位置的默认定位似乎不起作用.理想情况下,我希望用户可以拖动图例.如何才能做到这一点?

python matplotlib legend draggable

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

从matplotlib中的数字中删除colorbar

这应该很容易,但我很难用它.基本上,我在matplotlib中有一个子图,我在每次调用函数时都会绘制一个hexbin图,但每次调用该函数时我都会得到一个新的颜色条,所以我真正想做的就是更新colorbar .不幸的是,这似乎不起作用,因为colorbar附加的对象正在由subplot.hexbin重新创建.

def foo(self):
   self.subplot.clear()
   hb = self.subplot.hexbin(...)
   if self.cb:
      self.cb.update_bruteforce() # Doesn't work (hb is new)
   else:
      self.cb = self.figure.colorbar(hb)
Run Code Online (Sandbox Code Playgroud)

我现在正处于这个烦人的地方,我试图完全删除颜色条轴并简单地重新创建它.不幸的是,当我删除颜色条轴时,子图轴不会回收空间,调用self.subplot.reset_position()并没有按照我的想法进行.

def foo(self):
   self.subplot.clear()
   hb = self.subplot.hexbin(...)
   if self.cb:
      self.figure.delaxes(self.figure.axes[1])
      del self.cb
      # TODO: resize self.subplot so it fills the 
      #    whole figure before adding the new colorbar
   self.cb = self.figure.colorbar(hb)
Run Code Online (Sandbox Code Playgroud)

有没有人有什么建议?

非常感激!亚当

python matplotlib colorbar

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

如何在matplotlib中绘制多个X或Y轴?

我目前正在使用matplotlib在x轴上绘制针对2或3个其他测量值(有时是分类)的测量值.目前,我正在将x轴上的数据分组为元组并在绘图之前对它们进行排序......结果看起来像下面的左图.我想要做的是如右图所示绘制具有多个x轴的数据."处理"x轴标签的分组将锦上添花.

替代文字

python matplotlib

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

如何使用表示matplotlib中原始数据的颜色条绘制对数标准化的imshow图

我正在使用matplotlib绘制对数标准化的图像,但我希望原始的原始图像数据在颜色条中表示而不是[0-1]区间.通过使用某种规范化对象并且不事先转换数据,我感觉有更多的matplotlib'y方法.在任何情况下,原始图像中都可能存在负值.

import matplotlib.pyplot as plt
import numpy as np

def log_transform(im):
    '''returns log(image) scaled to the interval [0,1]'''
    try:
        (min, max) = (im[im > 0].min(), im.max())
        if (max > min) and (max > 0):
            return (np.log(im.clip(min, max)) - np.log(min)) / (np.log(max) - np.log(min))
    except:
        pass
    return im

a = np.ones((100,100))
for i in range(100): a[i] = i
f = plt.figure()
ax = f.add_subplot(111)
res = ax.imshow(log_transform(a))
# the colorbar drawn shows [0-1], but I want to see [0-99]
cb = …
Run Code Online (Sandbox Code Playgroud)

python matplotlib normalize

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

如何在没有.get的情况下获得骨干模型属性

在骨干中,似乎我必须通过获得模型属性 model.get('att_name')

我想让它们像我在对象中得到任何公共字段一样: model.att_name

任何人都可以想办法解决这个问题吗?

例如:在python世界中,我会在模型上覆盖getattr,如下所示:

def getattr(self, att):
   return self.get(att)
Run Code Online (Sandbox Code Playgroud)

哦,我正在使用CoffeeScript

javascript coffeescript backbone.js

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

在matplotlib中绘制子图周围的边框

任何人都知道如何在matplotlib中的图形中围绕单个子图绘制边框?我正在使用pyplot.

例如:

import matplotlib.pyplot as plt
f = plt.figure()
ax1 = f.add_subplot(211)
ax2 = f.add_subplot(212)
# ax1.set_edgecolor('black')
Run Code Online (Sandbox Code Playgroud)

..但Axes对象没有'edgecolor',我似乎无法找到从图形级别勾画出情节的方法.

我实际上是在包装mpl代码并添加带有控件的wx UI,我想根据选择的子图来获取上下文.即,用户点击图画布中的子图 - 子图是"已选中"(在其周围绘制轮廓,理想情况下是锯齿) - GUI更新以呈现控件以修改该特定子图.

python matplotlib

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

python和java之间的IPC(进程间通信)

首先,我首先要解释为什么我首先要问这个问题:我正在编写一个python程序(带有一个wxPython gui),需要从python调用Java AWT程序并从中提取数据.我在Windows上有一个进程内工作解决方案.只要我无头地运行Java应用程序,我在OSX上也有一个进程内解决方案.遗憾的是,我找不到在OSX上在同一进程中运行两个GUI的合理解决方案,因为AWT和WX都想要第一个线程并且不能共享wx消息循环.

What I would like to do is to launch a Java program in a separate process from my Python program and establish a pipe or queue or something for passing data (specifically byte arrays) back and forth.

I'd greatly appreciate any suggestions, or even a nudge in the right direction as I have very little experience with IPC.

python java ipc multiprocessing multiple-processes

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

在matplotlib中添加新的导航模式

我正在编写一个wx/matplotlib应用程序,我在向matplotlib NavigationToolbar添加新工具时遇到了相当大的困难.

基本上我想添加选择工具(选框,套索等)来切换受控子图鼠标模式.到目前为止,我一直无法找到任何可以让我轻松完成此任务的功能.

但是,我确实发现了这个看似有用的功能:http://matplotlib.sourceforge.net/api/axes_api.html?highlightlight = set_navigate_mode#matplotlib.axes.Axes.set_navigate_mode

不幸的是,正如警告所暗示的那样,它并没有真正帮助我.

有没有人知道如何做到这一点?下面是一个精简的例子,展示了我已经走了多远.书签图标用于代替我的套索图标,为了简洁起见,我删除了套索功能.

import wx
from matplotlib.patches import Rectangle
from matplotlib.widgets import Lasso
from matplotlib.figure import Figure
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg
from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as NavigationToolbar

class ScatterPanel(FigureCanvasWxAgg):
    '''
    Contains the guts for drawing scatter plots.
    '''
    def __init__(self, parent, **kwargs):
        self.figure = Figure()
        FigureCanvasWxAgg.__init__(self, parent, -1, self.figure, **kwargs)
        self.canvas = self.figure.canvas
        self.SetMinSize((100,100))
        self.figure.set_facecolor((1,1,1))
        self.figure.set_edgecolor((1,1,1))
        self.canvas.SetBackgroundColour('white')

        self.subplot = self.figure.add_subplot(111)
        self.navtoolbar = None
        self.lasso = None
        self.redraw()

        self.canvas.mpl_connect('button_press_event', self.on_press)
        self.canvas.mpl_connect('button_release_event', self.on_release)

    def …
Run Code Online (Sandbox Code Playgroud)

python matplotlib toolbar

8
推荐指数
2
解决办法
3913
查看次数

桌面上的Flexbox在Firefox中不起作用

使用flexbox控制表的布局在webkit浏览器中工作,但在Firefox中,<td>s只能呈现与其自己的内容一样宽.

演示:http://codepen.io/afraser/pen/wMgbzr? edit = 010

* {
  box-sizing: border-box;
}
table {
  border: 1px solid #ddd;
  width: 100%;
}
tbody {
  background: #fff;
}
tr {
  display: flex;
}
td:first-child {
  flex: 1 1 80%;
  background: mistyrose;
}
td:nth-child(2) {
  flex: 0 0 10%;
  background: Aquamarine;
}
td:nth-child(3) {
  flex: 0 0 10%;
  background: pink;
}
Run Code Online (Sandbox Code Playgroud)
<table>
  <tbody>
    <tr>
      <td>Ted</td>
      <td>1</td>
      <td>100%</td>
    </tr>
    <tr>
      <td>Turd Ferguson</td>
      <td>2</td>
      <td>65%</td>
    </tr>
    <tr>
      <td>Hingle McKringleberry</td>
      <td>3</td>
      <td>99%</td>
    </tr> …
Run Code Online (Sandbox Code Playgroud)

html css css3 flexbox

8
推荐指数
2
解决办法
1539
查看次数