- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
import matplotlib.pyplot as plt
import numpy as np
labels=['Siege', 'Initiation', 'Crowd_control', 'Wave_clear', 'Objective_damage']
markers = [0, 1, 2, 3, 4, 5]
str_markers = ["0", "1", "2", "3", "4", "5"]
def make_radar_chart(name, stats, attribute_labels=labels,
plot_markers=markers, plot_str_markers=str_markers):
labels = np.array(attribute_labels)
angles = np.linspace(0, 2*np.pi, len(labels), endpoint=False)
stats = np.concatenate((stats,[stats[0]]))
angles = np.concatenate((angles,[angles[0]]))
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, stats, 'o-', linewidth=2)
ax.fill(angles, stats, alpha=0.25)
ax.set_thetagrids(angles * 180/np.pi, labels)
plt.yticks(markers)
ax.set_title(name)
ax.grid(True)
fig.savefig("static/images/%s.png" % name)
return plt.show()
make_radar_chart("Agni", [2,3,4,4,5]) # example
基本上我希望图表是五边形而不是圆形。有人能帮忙吗。我正在使用 python matplotlib 保存图像,稍后将存储和显示。我希望我的图表具有第二张图片的形式
编辑:
gridlines = ax.yaxis.get_gridlines()
for gl in gridlines:
gl.get_path()._interpolation_steps = 5
最佳答案
radar chart demo展示了如何制作雷达图。结果如下所示:
在这里,外部书脊是根据需要的多边形形状。然而,内部网格线是圆形的。因此,悬而未决的问题是如何使网格线的形状与书脊的形状相同。
这可以通过覆盖 draw
方法并将网格线的路径插值步长变量设置为 RadarAxes
类的变量数来完成。
gridlines = self.yaxis.get_gridlines()
for gl in gridlines:
gl.get_path()._interpolation_steps = num_vars
完整示例:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, RegularPolygon
from matplotlib.path import Path
from matplotlib.projections.polar import PolarAxes
from matplotlib.projections import register_projection
from matplotlib.spines import Spine
from matplotlib.transforms import Affine2D
def radar_factory(num_vars, frame='circle'):
"""Create a radar chart with `num_vars` axes.
This function creates a RadarAxes projection and registers it.
Parameters
----------
num_vars : int
Number of variables for radar chart.
frame : {'circle' | 'polygon'}
Shape of frame surrounding axes.
"""
# calculate evenly-spaced axis angles
theta = np.linspace(0, 2*np.pi, num_vars, endpoint=False)
class RadarAxes(PolarAxes):
name = 'radar'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# rotate plot such that the first axis is at the top
self.set_theta_zero_location('N')
def fill(self, *args, closed=True, **kwargs):
"""Override fill so that line is closed by default"""
return super().fill(closed=closed, *args, **kwargs)
def plot(self, *args, **kwargs):
"""Override plot so that line is closed by default"""
lines = super().plot(*args, **kwargs)
for line in lines:
self._close_line(line)
def _close_line(self, line):
x, y = line.get_data()
# FIXME: markers at x[0], y[0] get doubled-up
if x[0] != x[-1]:
x = np.concatenate((x, [x[0]]))
y = np.concatenate((y, [y[0]]))
line.set_data(x, y)
def set_varlabels(self, labels):
self.set_thetagrids(np.degrees(theta), labels)
def _gen_axes_patch(self):
# The Axes patch must be centered at (0.5, 0.5) and of radius 0.5
# in axes coordinates.
if frame == 'circle':
return Circle((0.5, 0.5), 0.5)
elif frame == 'polygon':
return RegularPolygon((0.5, 0.5), num_vars,
radius=.5, edgecolor="k")
else:
raise ValueError("unknown value for 'frame': %s" % frame)
def draw(self, renderer):
""" Draw. If frame is polygon, make gridlines polygon-shaped """
if frame == 'polygon':
gridlines = self.yaxis.get_gridlines()
for gl in gridlines:
gl.get_path()._interpolation_steps = num_vars
super().draw(renderer)
def _gen_axes_spines(self):
if frame == 'circle':
return super()._gen_axes_spines()
elif frame == 'polygon':
# spine_type must be 'left'/'right'/'top'/'bottom'/'circle'.
spine = Spine(axes=self,
spine_type='circle',
path=Path.unit_regular_polygon(num_vars))
# unit_regular_polygon gives a polygon of radius 1 centered at
# (0, 0) but we want a polygon of radius 0.5 centered at (0.5,
# 0.5) in axes coordinates.
spine.set_transform(Affine2D().scale(.5).translate(.5, .5)
+ self.transAxes)
return {'polar': spine}
else:
raise ValueError("unknown value for 'frame': %s" % frame)
register_projection(RadarAxes)
return theta
data = [['Sulfate', 'Nitrate', 'EC', 'OC1', 'OC2', 'OC3', 'OP', 'CO', 'O3'],
('Basecase', [
[0.88, 0.01, 0.03, 0.03, 0.00, 0.06, 0.01, 0.00, 0.00],
[0.07, 0.95, 0.04, 0.05, 0.00, 0.02, 0.01, 0.00, 0.00],
[0.01, 0.02, 0.85, 0.19, 0.05, 0.10, 0.00, 0.00, 0.00],
[0.02, 0.01, 0.07, 0.01, 0.21, 0.12, 0.98, 0.00, 0.00],
[0.01, 0.01, 0.02, 0.71, 0.74, 0.70, 0.00, 0.00, 0.00]])]
N = len(data[0])
theta = radar_factory(N, frame='polygon')
spoke_labels = data.pop(0)
title, case_data = data[0]
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(projection='radar'))
fig.subplots_adjust(top=0.85, bottom=0.05)
ax.set_rgrids([0.2, 0.4, 0.6, 0.8])
ax.set_title(title, position=(0.5, 1.1), ha='center')
for d in case_data:
line = ax.plot(theta, d)
ax.fill(theta, d, alpha=0.25)
ax.set_varlabels(spoke_labels)
plt.show()
关于python - 如何在 python 中制作多边形雷达(蜘蛛)图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52910187/
我想使用这个过滤器从网站 http://www.quoka.de/immobilien/bueros-gewerbeflaechen 抓取数据: nur Angebote 如何使用scrapy设置这个
我正在研究制作网络爬虫/蜘蛛,但是我需要有人指出正确的方向才能上手。 基本上,我的Spider会搜索音频文件并将它们编入索引。 我只是想知道是否有人对我应该如何做有任何想法。我听说用PHP完成它会非常
如果 Nutch 页面已经在索引中,它们会再次索引它们吗?如果是这样,我该如何更改? 最佳答案 是和否。默认情况下,Nutch 只会在 1 个月的某个时间段(从内存中)重新索引页面,如果页面没有更改,
我在一个 Scrapy 项目中有两个蜘蛛。 Spider1 抓取页面列表或整个网站并分析内容。 Spider2 使用 Splash 获取 Google 上的 URL 并将该列表传递给 Spider1。
我正在使用 python scrapy 包。有没有办法在蜘蛛运行时更新 scrapy 蜘蛛设置?我尝试了 telnet 控制台并通过以下方式更新设置: settings.set('AUTOTHROTT
我正在尝试安装 Sphider 来搜索我的网站,当我尝试创建 MySQL 表时出现此错误: create table query_log ( query varchar(255), tim
正在关注 How to pass a user defined argument in scrapy spider ,我写了下面这个简单的蜘蛛: import scrapy class Funda1S
我正在开发一个简单的抓取工具来获取 9 个搞笑帖子及其图片,但由于一些技术困难,我无法停止抓取工具,它继续抓取,这是我不想要的。我想增加计数器值并在 100 个帖子后停止。但是 9gag 页面的设计方
我创建了一个 Scrapy 蜘蛛。但我想将它作为脚本运行。我该怎么做。现在我可以在终端中通过这个命令运行: $ scrapy crawl book -o book.json 但我想像运行一个简单的 p
我正在尝试构建一个系统来运行 a few dozen Scrapy spiders ,将结果保存到 S3,并在完成时通知我。 StackOverflow 上有几个类似的问题(例如 this one 和
我正在用 Python 编写蜘蛛来抓取网站。问题是,我需要检查大约 250 万页,所以我真的需要一些帮助来优化它的速度。 我需要做的是检查一定数量的页面,如果找到就记录该页面的链接。蜘蛛非常简单,它只
我需要创建一个用户可配置的网络蜘蛛/爬虫,我正在考虑使用 Scrapy。但是,我无法对域和允许的 URL regex:es 进行硬编码——这将在 GUI 中进行配置。 我如何(尽可能简单地)使用 Sc
我已经开始使用 Scrapy抓取一些网站。如果我稍后向我的模型添加一个新字段或更改我的解析函数,我希望能够离线“重放”下载的原始数据以再次抓取它。看起来 Scrapy 有能力在某一时刻将原始数据存储在
我的问题实际上是如何做与上一个问题相同的事情,但在 Scrapy 0.14 中。 Using one Scrapy spider for several websites 基本上,我有一个 GUI,它
我有一个关于 python (Python 2.7) IDE Spider (2.3.5.2) 的具体问题 今天我注意到我的脚本作为一个整体运行时有所不同,即当我按 F5 时。或者当我只运行一行或一个
我有一个 crontab 作业,运行一个 myautorun.sh 文件,其中包含 3 个蜘蛛: crontab -e 14 * * * * * ~bin/myautorun.sh myautorun
到目前为止,我的代码可以打开一个文本文件,将其处理成一个 pandas 数据文件,然后导出到 excel。 我正在与其他人共享此代码,我们在 Spyder 中都有相同的工作目录。所有代码都运行良好,我
最近想为Openstack添加自动登录功能。所以我为 openstack 编写了一个 python 蜘蛛,如下所示: import urllib import urllib2 import cooki
如何使用 PHP 检测爬虫/蜘蛛? 我目前正在做一个项目,我需要跟踪每个爬虫的访问。 我知道你应该使用 HTTP_USER_AGENT 但我不太确定如何为此目的格式化代码而且我知道可以很容易地更改 U
我已经使用 scrapy 编写了一个工作爬虫, 现在我想通过一个Django webapp来控制它,也就是说: 设置1个或多个start_urls 设置 1 个或多个 allowed_domains
我是一名优秀的程序员,十分优秀!