我试图在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用特殊颜色绘制(例如:灰色或透明)?
我在matplotlib中的轴对象上绘制了一个图例,但声称将其置于智能位置的默认定位似乎不起作用.理想情况下,我希望用户可以拖动图例.如何才能做到这一点?
这应该很容易,但我很难用它.基本上,我在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)
有没有人有什么建议?
非常感激!亚当
我目前正在使用matplotlib在x轴上绘制针对2或3个其他测量值(有时是分类)的测量值.目前,我正在将x轴上的数据分组为元组并在绘图之前对它们进行排序......结果看起来像下面的左图.我想要做的是如右图所示绘制具有多个x轴的数据."处理"x轴标签的分组将锦上添花.

我正在使用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) 在骨干中,似乎我必须通过获得模型属性 model.get('att_name')
我想让它们像我在对象中得到任何公共字段一样: model.att_name
任何人都可以想办法解决这个问题吗?
例如:在python世界中,我会在模型上覆盖getattr,如下所示:
def getattr(self, att):
return self.get(att)
Run Code Online (Sandbox Code Playgroud)
哦,我正在使用CoffeeScript
任何人都知道如何在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程序(带有一个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.
我正在编写一个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) 使用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)python ×8
matplotlib ×7
backbone.js ×1
coffeescript ×1
colorbar ×1
css ×1
css3 ×1
draggable ×1
flexbox ×1
html ×1
ipc ×1
java ×1
javascript ×1
legend ×1
nan ×1
normalize ×1
toolbar ×1