python绘制彩色地震剖面_在地图上绘制饼图时“爆炸”楔形图(Python,matplotlib)...

在使用Python的matplotlib库在地图上绘制饼图时,作者遇到一个问题,部分楔形图超出饼图边界。尽管代码基于已知示例,但无法找出问题所在。代码中展示了绘制饼图的函数以及地图设置。减少每个饼图的楔形数量到6可以避免问题,但7个及以上时会再次出现。作者寻求解决方案。
摘要由CSDN通过智能技术生成

所以我成功地在地图上绘制了饼图作为标记轴向散射,但我遇到了一些问题,一些楔子“爆炸”出了饼图。我似乎在我的代码中找不到原因,也无法在网上找到解释。这段代码基于示例here,一位同事也使用了这个示例并生成了普通的、统一的饼图。我们之间找不到问题,也没有出错。在

代码:import numpy as np

import math

import matplotlib

import matplotlib.pyplot as plt

from mpl_toolkits.basemap import Basemap, cm

australia_data = np.zeros((24,12))

colors = ['red','yellow','blue','mediumorchid']

#pie chart locations

xlon=[146.7,166,101.6,137.4,145.1,113.6,169.7,113.3,176.0,139.6,148.9,124.2,132.4,142.0,129.6,148.0,116.5,142.8,141.7,128.0,113.6,120.7,128.3,148.6]

ylat=[-42.2,-19.2,-0.5,-3.5,-34.4,-8.7,-45.1,-1.0,-38.6,-26.7,-29.1,-20.0,-14.4,-18.9,-31.3,-6.6,-23.8,-3.4,-7.5,-25.6,3.8,-3.1,-1.9,-23.2]

#function to draw pie charts on map

def draw_pie(ax,X=0, Y=0, size = 1500):

xy = []

start = 0.17

ratios=[1/12.]*12

for ratio in ratios:

x = [0] + np.cos(np.linspace(2*math.pi*start,2*math.pi*(start+ratio))).tolist() #30

y = [0] + np.sin(np.linspace(2*math.pi*start,2*math.pi*(start+ratio))).tolist() #30

xy1=(zip(x,y))

xy.append(xy1)

start -= ratio

piecolors = []

for lt in range(12):

c = australia_data[b,lt]-1

c=int(c)

piecolors.append(colors[c])

for i, xyi in enumerate(xy):

ax.scatter([X],[Y] , marker=(xyi,0), s=size, facecolor=piecolors[i],linewidth=0.5,alpha=.7)

australia_data[:,11] = 1

australia_data[:,4] = 3

australia_data[:,1] = 2

fig = plt.figure()

ax = fig.add_axes([.05,.01,.79,.95])

x1 = 90 #left

x2 = 180 #right

y1 = -50 #bottom

y2 = 10 #top

#Create the map

m = Basemap(resolution='l',projection='merc', llcrnrlat=y1,urcrnrlat=y2,llcrnrlon=x1,urcrnrlon=x2,lat_ts=0) #,lat_ts=(x1+x2)/2

m.drawcoastlines()

#plots pie charts:

for b in range(24):

X,Y=m(xlon[b],ylat[b])

draw_pie(ax,X, Y,size=400)

plt.savefig('australia_pies.png',dpi=400)

有什么想法知道为什么会发生这种情况(以及如何解决它!)不胜感激!

编辑:这似乎是一个饼图中楔子数量的问题-减少到6将导致均匀的饼图,但7+会导致一些楔子“爆炸”。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值