精华内容
下载资源
问答
  • 有关安装PIL:answer 1,answer 2的方法的示例,请参阅这些答案对,安装完毕后,以下代码应该做你所要求的:import matplotlib.pyplot as pltimport matplotlib.ticker as pltickertry:from PIL im...

    您将需要安装

    python成像库(PIL). (见

    https://pypi.python.org/pypi/PIL).有关安装PIL:

    answer 1,

    answer 2的方法的示例,请参阅这些答案

    对,安装完毕后,以下代码应该做你所要求的:

    import matplotlib.pyplot as plt

    import matplotlib.ticker as plticker

    try:

    from PIL import Image

    except ImportError:

    import Image

    # Open image file

    image = Image.open('myImage.tiff')

    my_dpi=300.

    # Set up figure

    fig=plt.figure(figsize=(float(image.size[0])/my_dpi,float(image.size[1])/my_dpi),dpi=my_dpi)

    ax=fig.add_subplot(111)

    # Remove whitespace from around the image

    fig.subplots_adjust(left=0,right=1,bottom=0,top=1)

    # Set the gridding interval: here we use the major tick interval

    myInterval=100.

    loc = plticker.MultipleLocator(base=myInterval)

    ax.xaxis.set_major_locator(loc)

    ax.yaxis.set_major_locator(loc)

    # Add the grid

    ax.grid(which='major', axis='both', linestyle='-')

    # Add the image

    ax.imshow(image)

    # Find number of gridsquares in x and y direction

    nx=abs(int(float(ax.get_xlim()[1]-ax.get_xlim()[0])/float(myInterval)))

    ny=abs(int(float(ax.get_ylim()[1]-ax.get_ylim()[0])/float(myInterval)))

    # Add some labels to the gridsquares

    for j in range(ny):

    y=myInterval/2+j*myInterval

    for i in range(nx):

    x=myInterval/2.+float(i)*myInterval

    ax.text(x,y,'{:d}'.format(i+j*nx),color='w',ha='center',va='center')

    # Save the figure

    fig.savefig('myImageGrid.tiff',dpi=my_dpi)

    如果在grace_hopper.png示例文件中使用,则会生成以下输出:

    展开全文
  • 我想在图像一条穿过两个像素的线,并用添加的新线保存它(不是绘图)。在这之后,我想用不同的颜色一条垂直于前一条线线。使用matplotlib实现这一点的最佳方法是什么?我用皮尔试过了。我没能做到。请看一下...

    我有一个图像,我正在使用pyfits加载到2D数组中。我想在图像上画一条穿过两个像素的线,并用添加的新线保存它(不是绘图)。在这之后,我想用不同的颜色画一条垂直于前一条线的线。使用matplotlib实现这一点的最佳方法是什么?我用皮尔试过了。我没能做到。请看一下代码并建议我一种方法。我也附上了图片def plotAxes(map, angle, x_centroid, y_centroid):

    hor = math.floor(x_centroid + 20*(math.cos(angle)))

    ver = math.floor(y_centroid - 20*(math.sin(angle)))

    hor1 = math.floor(x_centroid + 20*(math.cos(angle+90.0)))

    ver1 = math.floor(y_centroid - 20*(math.sin(angle+90.0)))

    map_height = len(map)

    map_width = len(map[0])

    point = [ver, hor]

    center = [y_centroid, x_centroid]

    Max = np.max(map)

    array = np.zeros((map_height, map_width), int)

    for i in range(0, map_height):

    for j in range(0, map_width):

    array[i][j] = (math.floor((float(map[i][j])/float(Max))*255))

    im = Image.fromarray(np.uint8(array))

    draw = ImageDraw.Draw(im)

    draw.line((x_centroid,y_centroid, hor,ver ), fill="red")

    draw.line((x_centroid,y_centroid, hor1,ver1 ), fill="red")

    im.show()

    但是上面的代码似乎没有垂直打印这些行。角度看起来是120而不是90。在

    31c33450e49d96353a470108390e54a1.png

    展开全文
  • See these answers for examples of ways to install PIL: answer 1, answer 2 Right, with that installed, the following code should do what you ask for: import matplotlib.pyplot as plt import matplotlib....

    How can I draw regular grid lines over a tiff image?

    I want to draw regular square grids for each interval (say 100 by 100 pixels) over the image and save that with the drawings. I also need to overlay each grid id as '1','2',...at the middle of each grid box.

    解决方案

    You will need the python imaging library (PIL) installed. (See here https://pypi.python.org/pypi/PIL). See these answers for examples of ways to install PIL: answer 1, answer 2

    Right, with that installed, the following code should do what you ask for:

    import matplotlib.pyplot as plt

    import matplotlib.ticker as plticker

    try:

    from PIL import Image

    except ImportError:

    import Image

    # Open image file

    image = Image.open('myImage.tiff')

    my_dpi=300.

    # Set up figure

    fig=plt.figure(figsize=(float(image.size[0])/my_dpi,float(image.size[1])/my_dpi),dpi=my_dpi)

    ax=fig.add_subplot(111)

    # Remove whitespace from around the image

    fig.subplots_adjust(left=0,right=1,bottom=0,top=1)

    # Set the gridding interval: here we use the major tick interval

    myInterval=100.

    loc = plticker.MultipleLocator(base=myInterval)

    ax.xaxis.set_major_locator(loc)

    ax.yaxis.set_major_locator(loc)

    # Add the grid

    ax.grid(which='major', axis='both', linestyle='-')

    # Add the image

    ax.imshow(image)

    # Find number of gridsquares in x and y direction

    nx=abs(int(float(ax.get_xlim()[1]-ax.get_xlim()[0])/float(myInterval)))

    ny=abs(int(float(ax.get_ylim()[1]-ax.get_ylim()[0])/float(myInterval)))

    # Add some labels to the gridsquares

    for j in range(ny):

    y=myInterval/2+j*myInterval

    for i in range(nx):

    x=myInterval/2.+float(i)*myInterval

    ax.text(x,y,'{:d}'.format(i+j*nx),color='w',ha='center',va='center')

    # Save the figure

    fig.savefig('myImageGrid.tiff',dpi=my_dpi)

    Which, if used on the grace_hopper.png example file, produces the following output:

    展开全文
  • 图像展示数据及其拟合线可以非常直观地看出拟合线与数据的匹配程度,同时也可用于后续的解释和阐述工作。 这里利用Nathan Yau所著的《鲜活的数据:数据可视化指南》一书的数据,学习画图。 数据地址:...

    在机器学习中,经常要用scikit-learn里面的线性回归模型来对数据进行拟合,进而找到数据的规律,从而达到预测的目的。用图像展示数据及其拟合线可以非常直观地看出拟合线与数据的匹配程度,同时也可用于后续的解释和阐述工作。

     

    这里利用Nathan Yau所著的《鲜活的数据:数据可视化指南》一书中的数据,学习画图。

     

    数据地址:http://datasets.flowingdata.com/unemployment-rate-1948-2010.csv

     

    准备工作:先导入matplotlib和pandas,用pandas读取csv文件,然后创建一个图像和一个坐标轴

    import pandas as pd
    from matplotlib import pyplot as plt
    unemployment=pd.read_csv(r"http://datasets.flowingdata.com/unemployment-rate-1948-2010.csv")
    fig,ax=plt.subplots()

     

    让我们先来看看这个数据文件(此处只截取部分):

           Series id  Year Period  Value
    0    LNS14000000  1948    M01    3.4
    1    LNS14000000  1948    M02    3.8
    2    LNS14000000  1948    M03    4.0
    3    LNS14000000  1948    M04    3.9
    4    LNS14000000  1948    M05    3.5
    ..           ...   ...    ...    ...
    716  LNS14000000  2007    M09    4.7
    717  LNS14000000  2007    M10    4.7
    718  LNS14000000  2007    M11    4.7
    719  LNS14000000  2007    M12    5.0

    这个数据展示的是美国1948年到2010年各月份的失业率。

     

    我们需要先把数据用散点图画出来,再用sklearn对数据进行拟合,最后把拟合线也画出来。

     

    首先,把年份和失业率数据提取出来,画出散点图。这里需要注意的是,年份数据比失业率数据规模大很多(年份以千计,失业率大部分是个位数),因此在拟合前需要进行特征缩放,否则年份这一特征值的影响将远远大于失业率。

     

    其次,从sklearn导入线性回归模块。假设数据模型属于简单线性回归,此时,就是把年份数据当作自变量(通常记为变量x),失业率数据当作因变量(通常记为变量y),找出它们之间的线性关系。然后在散点图上画出此拟合线。需要注意的是:年份数据是一维数组,需要将其转换为二维矩阵(这个矩阵的每一列为各个特征的量化值,每一行为每个样本的观测数据),才可以用sklearn进行拟合。通常通过x.reshape(-1,1)方法或x[:,np.newaxis]方法将其转换。

     

    此时图像如下:

    可以看出,这条拟合线并不能很好反映出数据的pattern。

     

    所以接下来,我们再用多项式回归模型来试一试。sklearn里面并没有直接的多项式回归模块可供我们使用,而是需要从sklearn.preprocessing导入PolynomialFeatures,在PolynomialFeatures里确定进行几次多项式变换,将年份自变量转换为多项式形式,然后再用线性模型进行拟合。例如:假设年份自变量为:

    [[19]
     [20]
     [21]]

    那么将其转换为二次多项式形式(degree=2)后就变成:

    [[1  19  361]
     [1  20  400]
     [1  21  441]]

    这样就相当于把原有的方程式y=b1x+a转换成了y=b1x+b2x2+1+a。

     

    完整代码如下:

    import numpy as np
    import pandas as pd
    import matplotlib
    from matplotlib import pyplot as plt
    unemployment=pd.read_csv(r"http://datasets.flowingdata.com/unemployment-rate-1948-2010.csv")
    fig,ax=plt.subplots(figsize=(10,6))
    
    #提取年份和对应的失业率数据,由于年份数据都是上千,而失业率大都是个位数,
    #因此这里要用到特征缩放,把年份缩小100倍
    x=unemployment["Year"].values/100
    y=unemployment["Value"].values
    
    #以年份为x轴,失业率为y轴,画出散点图
    ax.plot(x,y,"o",markerfacecolor="none")
    ax.set(xlabel="Year",ylabel="Unemployment rate",title="US Unemployment Rate (1948-2010)")
    ax.yaxis.set_major_formatter(matplotlib.ticker.FormatStrFormatter('%.f%%')) #把y轴刻度值设置为百分比形式
    ax.set_xticklabels(np.arange(1940,2011,10)) #设置x轴刻度标签
    
    #假设数据属于简单线性回归,对其进行拟合
    from sklearn.linear_model import LinearRegression
    linear=LinearRegression()
    xfit=x.reshape(-1,1)
    yfit=y.reshape(-1,1)
    linear.fit(xfit,yfit)
    xpre=np.linspace(19.5,20.1,num=50,endpoint=True) #创建用于预测的x值
    ypre=linear.predict(xpre[:,np.newaxis])
    
    ax.plot(xpre,ypre,"-",label="degree 1")
    
    #假设数据属于多项式回归,分别对其进行拟合
    from sklearn.preprocessing import PolynomialFeatures
    for i in [2,4]:
        PF=PolynomialFeatures(degree=i)
        xfit1=PF.fit_transform(xfit)
        linear1=LinearRegression()
        linear1.fit(xfit1,yfit)
        xpre1=PF.fit_transform(xpre[:,np.newaxis])
        ypre1=linear1.predict(xpre1)
        ax.plot(xpre,ypre1,"-",label="degree {}".format(i))
    
    ax.legend()
    
    plt.show()

     

    图像如下:

    可以看出,用多项式回归模型进行拟合的效果比较好。

     

    转载于:https://www.cnblogs.com/HuZihu/p/9522476.html

    展开全文
  • Pycharm Matplotlib 图像不显示问题

    万次阅读 热门讨论 2017-11-17 11:40:50
    学习Matplotlib的时候,Pycharm运行的时候不会弹出图像。 首先你运行之后最小化pycharm,看看是不是已经出来了,只是没有自己弹到最顶层。   代码如下:   import numpy as np import matplotlib....
  • 首先补充一下:两种体系7种颜色rgbymck(红,绿,蓝,黄,品红,青,黑)科研的过程,坐标系的XY不一定就是等尺度的。例如声波对Y轴取对数。肆意我们也必须知道这种坐标系如何出来的。有3个函数可以实现...
  • python中画正态分布图像 import numpy as np import matplotlib.mlab as mlab import matplotlib.pyplot as plt def demo2(): mu, sigma , num_bins = 0, 1, 50 x = mu + sigma * np.random.randn(1000000...
  • 编辑推荐:本文讲了对数坐标图,极坐标图像,柱状图,散列图,由离散的点构成的,3D图像,主要是调用3D图像库,希望对大家有帮助。本文来自于csdn,由火龙果软件Delores编辑,推荐。首先补充一下:两种体系7种颜色 r ...
  • 出3D曲面python,我们可以使用mplot3d将表面直接绘制成3D形状。下面例子,我们将再次使用绘制等值线图所用到的z=f(x,y)函数。计算出分割线坐标后,就可以用plot_surface( )函数绘制曲面。修改颜色表,3D表面...
  • 2-python图像处理之Matplotlib

    千次阅读 2016-12-31 12:06:44
    Matplotlib matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API, 十分适合交互式地行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序。... 画线,使用pylab的pl
  • 画图,我们需要放大图像的某一部分,看清其变化。最近写论文时,就遇到了这个问题,还有坐标轴加粗、控制线型和大小等要求。这些,都可以通过Python Matplotlib库实现。具体看下面的代码: import matplotlib....
  • import matplotlib.pyplot as plt import numpy as np from matplotlib.pyplot import MultipleLocator def padding_data(x): array1 = [] up_coefficient = [1.122e-08, - 5.613e-06 , 0.0008606, - 0.0...
  • matplotlib画会动的椭圆

    2020-03-19 13:25:00
    实现的过程遇到了一些问题,记录一下自己的实现方法 实现结果 animation 我们知道matplotlib提供一个animation的子包来实现绘制动态图像绘制动态图像时主要有两种方法: 第一种 对于line这种曲线类,...
  • 通过Matplotlib画sin(x)

    2021-04-09 02:42:15
    为了使曲线变得平滑,[0,2π]的区间内生成256个数据,生成的图像如图1所示。 import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2 * np.pi, num=100) y = np.sin(x) plt.plot(x, y) plt....
  • 有些情况下,我们需要二维图表使用轮廓或颜色区域来展示三维的数据(可以设想等高线地图或温度分布图)。Matplotlib 提供了三个有用的函数来处理这项任务:plt.contour绘制轮廓图,plt.contourf来绘制填充区域颜色...
  • 参考链接: Python | 使用openpyxl模块...在matplotlib的层级结构,最高层是由matplotlib.pyplot模块提供的“状态机环境”(state-machine environment),通过它来为当前维度绘制图像元素,例如曲线、文本、图片..
  • 这将保存我在画布上的图像,在图形,但它不会保存我在图像上绘制的线条。在以下是我如何创建我的身材:if new:y, x = self.model.get_image_shape()self.figure = Figure(figsize=(x*2/72.0, y*2/72.0), dpi=72)...
  • 每个 Matplotlib.pyplot 中的函数会对当前的图像进行一些修改,例如:产生新的图像,在图像中产生新的绘图区域,在绘图区域中画线,给绘图加上标记,等等…… Matplotlib.pyplot 会自动记住当前的图像和...
  • pyplot的每一个函数都会对画布图像作出相应的改变,如创建画布、画布创建一个绘图区、绘图区上几条线、给图像添加文字说明等。下面我们就通过实例代码来领略一下他的魅力。import matplotlib.pyplot as ...
  • 每个 Matplotlib.pyplot 中的函数会对当前的图像进行一些修改,例如:产生新的图像,在图像中产生新的绘图区域,在绘图区域中画线,给绘图加上标记,等等…… Matplotlib.pyplot 会自动记住当...
  • figure创建窗口,matplotlib中的所有图像都是位于figure对象,一个图像只能有一个figure对象。 subplot创建子图。所有的绘画只能子图上进行,figure对象下创建一个或多个subplot对象(即axes)用于绘制图像。 2、...
  • pyplot的每一个函数都会对画布图像作出相应的改变,如创建画布、画布创建一个绘图区、绘图区上几条线、给图像添加文字说明等。下面我们就通过实例代码来领略一下他的魅力。import matplotlib.pyplot as ...
  • 每个 Matplotlib.pyplot 中的函数会对当前的图像进行一些修改,例如:产生新的图像,在图像中产生新的绘图区域,在绘图区域中画线,给绘图加上标记,等等…… Matplotlib.pyplot 会自动记住当前的图像...
  • 例如:产生新的图像,在图像中产生新的绘图区域,在绘图区域中画线,给绘图加上标记,等等…matplotlib.pyplot会自动记住当前的图像和绘图区域,因此这些函数会直接作用在当前的图像上。 在实际的使用过程中,常常以...
  • Matplotlib基础学习笔记

    2020-12-26 22:28:56
    import matplotlib.pyplot as plt 1、figure():创建图表 2、subplot():创建子图 子图的序号排序顺序是:从左到右,从上到下,逐次增加1 3、多个表中创建子图 ...6、一张表中画多个曲线 for i in
  • 1.绘制第一幅图表(1)figure函数,创建图表(2)subplot函数,创建子图(3)多个图表中创建子图(4)plot()函数,画函数图像(5)sca()函数,选择子图(6) 一张表中画多个曲线2.直方图3.散点图4.饼图5.图表的注释与标识6....

空空如也

空空如也

1 2 3 4
收藏数 75
精华内容 30
关键字:

matplotlib在图像中画线