我有一个numpy
数组 A
,形状为(60,60,3)
,我正在使用:
plt.imshow( A,
cmap = plt.cm.gist_yarg,
interpolation = 'nearest',
aspect = 'equal',
shape = A.shape
)
plt.savefig( 'myfig.png' )
当我检查myfig.png
文件时,我发现它是1200x800像素(彩色)。
这里发生了什么?我期待一张60x60的RGB图像。
答案 0 :(得分:1)
matplotlib
不直接使用像素,而是图形尺寸(以英寸为单位)和分辨率(每英寸点数,dpi
)
因此,您需要明确给出数字大小和dpi。例如,您可以将图形大小设置为1x1英寸,然后将dpi设置为60,以获得60x60像素的图像。
您还必须删除绘图区域周围的空白,您可以使用subplots_adjust
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(1,1))
A = np.random.rand(60,60,3)
plt.imshow(A,
cmap=plt.cm.gist_yarg,
interpolation='nearest',
aspect='equal',
shape=A.shape)
plt.subplots_adjust(left=0,right=1,bottom=0,top=1)
plt.savefig('myfig.png',dpi=60)
这创造了这个数字:
尺寸为60x60像素:
$ identify myfig.png
myfig.png PNG 60x60 60x60+0+0 8-bit sRGB 8.51KB 0.000u 0:00.000
你也可以参考this answer,它有很多关于数字大小和分辨率的好信息。
答案 1 :(得分:0)
由于public class JsonForm extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
JSONObject myObject = new JSONObject();
myObject.put("firstname","Mike");
myObject.put("lastname","J");
myObject.put("email","j@mail.com");
out.println(myObject);
JSONObject myRecord = new JSONObject();
myRecord.put("firstname","Mike");
myRecord.put("lastname","J");
myRecord.put("email","j@mail.com");
JSONArray myRecords = new JSONArray();
myRecords.add(myRecord);
}
}
//grid
Ext.onReady(function(){
Ext.define('myRecord',{
extend: 'Ext.data.Model',
proxy: {
type: 'memory',
reader: 'json'
},
fields: [
// set up the fields mapping into the xml doc
// The first needs mapping, the others are very basic
'firstName','lastName', 'email'
]
});
var gridStore = Ext.create('Ext.data.JsonReader', {
autoLoad: true,
proxy: {
// load using HTTP
type: 'ajax',
url: '',
// the return will be XML, so lets set up a reader
reader: {
type: 'json',
// records will have an "Item" tag
root: 'myRecord'
}
}
});
grid = Ext.create('Ext.grid.Panel', {
store: gridStore,
// selModel: sm,
columnLines: true,
frame: true,
columns: [
{text: "First Name", flex:1, dataIndex: 'firstName', tdCls: 'no-dirty'},
{text: "Last Name", flex:1, dataIndex: 'lastName', tdCls: 'no-dirty'},
{text: "Email", flex:1, dataIndex: 'email', tdCls: 'no-dirty',}
],
renderTo:Ext.getBody(),
width: '100%',
height: 650
});
});
会根据您的数据呈现图片并且具有选项plt.savefig
(每英寸点数),因此会将其设置为某个默认值。您可以通过执行dpi
答案 2 :(得分:-2)
作为初步评论, matplotlib
工具箱有助于创建大量的2D / 3D绘图,同时支持的构图智能叠加> pixmap-DataSET
强> -s
(“ 图片 ”可以设想为{3D
[对于 RGB
] | 4D
[{strong} RGBA
] }-colourspace
数据pixmap-DataSet
- s 2D-[x,y]
- 将颜色映射到“2D - 纸“)
因此,可以通过pixmap-DataSET
方法覆盖/查看/保存 matplotlib
图片。
pixmap
尺寸设置?对于 “picture” 对象,对于无限数字precision
和任意深度LevelOfDetail
的无约束世界来说,它是“特殊的”在 matplotlib
中,有一些设置会在处理生命周期的最后阶段 - 在输出生成时刻考虑。
所以,
matplotlib
可以指示(预先)选择 Renderer
,以特殊印刷密度生成最终图形输出。 ..又名 dpi = 60
每英寸点数和
还提供整体尺寸 .. 。 figsize = ( 1, 1 )
,这使您的60 x 60图像精确为60x60像素(一旦您花费更多精力来强制matplotlib
禁用所有边缘和其他特定于布局的环境)< / p>
叠加合成也可以使用 .figimage()
方法,其中可以另外指定x0 = x_PX_OFFSET
和y0 = y_PX_OFFSET
详细信息,了解从哪里开始放置给定figsize * dpi
像素映射区域内的图片数据。