这是我正在尝试修改的起始示例:
library(reshape2)
data <- mtcars[, c(1,3,4,5,6,7)]
cormat <- round(cor(data),2)
melted_cormat <- melt(cormat, na.rm = TRUE)
ggplot(
data = melted_cormat,
aes(Var1, Var2, fill=value)
) +
geom_tile() +
geom_text(
aes(Var2, Var1, label = value)
) +
scale_fill_gradient2(
low = 'red',
high = 'blue',
mid = 'white',
midpoint = 0, # <-- look at this
limit = c(-1, 1)
)
Run Code Online (Sandbox Code Playgroud)
此代码创建一个情节:
但是当我将唯一的中点更改为midpoint = -0.5绘图时,如下所示:
在我看来,输出是不正确的,因为我清楚地说明了low = 'red'并且在图中最低值颜色介于红色和白色之间。
我正在寻找一种解决方案如何保持midpoint = -0.5从 -1(红色)到 -0.5(白色)的完整渐变。
我正在使用 ECharts 4.0.4 ( http://echarts.baidu.com/ ) 在 X 轴上绘制一些带有时间戳的传感器数据。
已尝试使用旧系列数据和数据集(v4 上的新功能),但“时间”轴类型无法正常工作。使用“类别”可以正常工作:
var myChart = echarts.init(document.getElementById('main'));
var option = {
legend: {},
tooltip: {
trigger: 'axis',
},
dataset: {
source: {
timestamp: ['2018-04-10T20:40:33Z', '2018-04-10T20:40:53Z', '2018-04-10T20:41:03Z'],
sensor1: [1, 2, 4],
sensor2: [5, 3, 2]
}
},
xAxis: { type: 'category' },
yAxis: { },
series: [
{ type: 'line'},
{ type: 'line'}
],
};
myChart.setOption(option);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/echarts/4.0.4/echarts.min.js"></script>
<div id="main" style="width: 500px;height:400px;"></div>Run Code Online (Sandbox Code Playgroud)
有了“时间”,它不会:
var myChart = echarts.init(document.getElementById('main'));
var option = {
legend: {}, …Run Code Online (Sandbox Code Playgroud)javascript data-visualization time-series timeserieschart echarts
我有一个热图,其中包含一些值 ( model_prediction_i)。因为我想稍后在绘制之前旋转此热图,所以我必须使用plt.imsave. 然后,我的目标是,显示reference.jpg为图的背景,在其上绘图,X_test_i然后将热图也放置在该图上,这样我就可以看到背景、绘制的线和热图,它们的尺寸比背景小图片 -> 它只会遮挡一部分背景图片。作为reference.jpg:
这可能吗?
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
model_prediction_i = np.zeros((200,200))
model_prediction_i[160][160] = 1
model_prediction_i[160][161] = 1
model_prediction_i[160][162] = 1
model_prediction_i[160][163] = 1
model_prediction_i[160][164] = 1
model_prediction_i[160][165] = 1
model_prediction_i[160][166] = 1
model_prediction_i[160][167] = 1
model_prediction_i[160][168] = 1
model_prediction_i[160][169] = 1
model_prediction_i[160][170] = 1
model_prediction_i[160][171] = 1
plt.imsave('outfile.jpg', model_prediction_i, cmap='hot')
rotated_img = Image.open('outfile.jpg')
background = Image.open('reference.jpg')
X_test_i = np.zeros((5, 2)) …Run Code Online (Sandbox Code Playgroud) 我在 ggplot 中有一个堆叠条形图,geom_text() 标签位于每个条形的中心。我想隐藏小条上的标签,以便图表看起来不会过于拥挤。我可以使用下面的代码来做到这一点,但是正如您在下面的链接图片中看到的那样,它弄乱了标签的位置(它们不再居中)。
有没有办法隐藏条形图标签而不会弄乱剩余标签的位置?
ggplot(data=outcome,
aes(x = category, y=percent,fill = outcome)) +
geom_bar(stat='identity') +
coord_flip() +
geom_text(data=outcome %>% filter(percent>=0.1),aes(label = percent), size = 3,position = position_stack(vjust = 0.5),
check_overlap=TRUE)
Run Code Online (Sandbox Code Playgroud)
我有一个 Pandas 数据框,如下所示:
目的贷款状况 商业贷款 0 商业贷款 1 买房子 0 买房子 1 商业贷款 1 买车 0 买房子 0 婚礼 1 商业贷款 0
我正在尝试制作一个堆叠条形图,其中每个类别都是 X 轴,并将 0 和 1 的计数作为它们的两个堆栈。
我该怎么做呢?我必须为每个类别手动计数还是有更聪明的方法来做到这一点?
我非常喜欢 Altair 用 Python 制作图表。作为致敬,我想重新生成“错误,我们画了一些”中的经济学人图:
这是第一次拍摄的代码:
import numpy as np
import pandas as pd
import altair as alt
df = pd.read_csv('http://infographics.economist.com/databank/Economist_corbyn.csv').dropna()
bars = alt.Chart(df, title="Average number of likes per Facebook post").mark_bar().
encode(
y=alt.Y('Page:O', axis=alt.Axis(title=''),
sort=alt.EncodingSortField(
field="Average number of likes per Facebook post 2016:Q", # The field to use for the sort
op="sum", # The operation to run on the field prior to sorting
order="ascending" # The order to sort in
)),
color=alt.value("#116EA1"),
x=alt.X("Average number of likes per Facebook …Run Code Online (Sandbox Code Playgroud) 我无法动态更新我在甲板上创建的图层。
我在创建初始图层(具有城市边界的要素集合 geojson)后初始化了地图。之后,我选择一个城市并尝试使用我使用 jquery-change 收听的下拉菜单将地区图层加载到地图中。我使用 gejosin.io 验证了城市和地区的 geojson,并且 voth 渲染得很好。在我的应用程序中,显示初始城市图层,但是当我更改图层实例(共享相同的 id,在文档中被告知如此)时,它不会在视图上更新。我使用了 setProps 并且在控制台中我可以看到层的数据确实在变化。唯一的问题似乎是更改未在地图中采取行动。我也尝试使用甲板(地图)的 redraw() 方法,但没有成功。
需要注意的一件事是,deck.gl 不会手动使用相关方法更新地图元素。它说它使用“反应式编程范式”。据我了解,当我们更改数据时,它会自行更新。我们使用外部函数的地方也有例外,这会导致更改没有任何效果,但我们这里不使用这样的东西。
var tarimDeck;
var typeColorList = {};
$(document).ready(function () {
// Set the map view zone.
$("#TarlaMapView").css("height", $(window).height() - 200 + "px").css("width", "100%");
const LIGHT_SETTINGS = {
lightsPosition: [-125, 50.5, 5000, -122.8, 48.5, 8000],
ambientRatio: 0.2,
diffuseRatio: 0.5,
specularRatio: 0.3,
lightsStrength: [1.0, 0.0, 2.0, 0.0],
numberOfLights: 2
};
// Get cities with geojson data to place initial layers.
// Currently cities are pulled from …Run Code Online (Sandbox Code Playgroud) 我想创建一个表示两列数据的折线图:F,输入日期,H,美元金额。日期应该是 X 轴,Y 轴是美元金额。
问题是我希望折线图上的日期代表在给定周、月或年中输入的所有金额的总和。
这张照片是 YouTube 分析,它创建了一个类似于我想在工作表中创建的图表:
类似于这些分析如何让您选择您希望数据(在本例中为视图,在我的表格案例中为数量)在收集时汇总的方式,我只是想分开?图表来描绘每周、每月和每年的不同范围。
https://docs.google.com/spreadsheets/d/1P2vFfCVmsJwPLyD48YWQkwCR0jY3CPg7S9uOVlYhvkk/edit?usp=sharing 这是我想要可视化的数据类型的链接。
charts data-visualization google-sheets array-formulas google-sheets-query
我使用 plotly 包在 python 上显示动态财务图表。但是,我没有设法使用 for 循环将所有关键点线放在一张图表上。这是我的代码:
fig.update_layout(
for i in range(0,len(data)):
shapes=[
go.layout.Shape(
type="rect",
x0=data['Date'][i],
y0=data['Max_alt'][i],
x1='2019-12-31',
y1=data['Max_ust'][i],
fillcolor="LightSkyBlue",
opacity=0.5,
layer="below",
line_width=0)])
fig.show()
Run Code Online (Sandbox Code Playgroud)
我有一个像下面这样的数据。它是基于时间序列的 EURUSD 平价金融数据集。我为 Local Min 和 Max 计算了两个约束。我想根据每个 Min_alt / Min_ust 和 Max_alt / Max_range 绘制矩形形状。我可以像下图那样只绘制一个日期,但是我没有设法在同一个绘图图中显示所有范围。
这是示例数据集。
这是添加行的解决方案:
import datetime
colors = ["LightSkyBlue", "RoyalBlue", "forestgreen", "lightseagreen"]
ply_shapes = {}
for i in range(0, len(data1)):
ply_shapes['shape_' + str(i)]=go.layout.Shape(type="rect",
x0=data1['Date'][i].strftime('%Y-%m-%d'),
y0=data1['Max_alt'][i],
x1='2019-12-31',
y1=data1['Max_ust'][i],
fillcolor="LightSkyBlue",
opacity=0.5,
layer="below"
)
lst_shapes=list(ply_shapes.values())
fig1.update_layout(shapes=lst_shapes)
fig1.show()
Run Code Online (Sandbox Code Playgroud)
但是,我仍然有问题要向这些行添加跟踪。我的意思是文本属性。
这是我的代码:
add_trace = {}
for …Run Code Online (Sandbox Code Playgroud) Altair 示例库包含一个很好的示例,说明如何使用区间选择创建两个图,其中一个图允许您定义另一个图的比例。我一直在尝试通过将工具提示定义为基础的一部分来向堆叠图表的两个部分添加工具提示:
import altair as alt
from vega_datasets import data
source = data.sp500.url
brush = alt.selection(type='interval', encodings=['x'])
base = alt.Chart(source).mark_area().encode(
x = 'date:T',
y = 'price:Q',
tooltip = 'price:Q'
).properties(
width=600,
height=200
)
upper = base
lower = base.properties(
height=60
).add_selection(brush)
upper & lower
Run Code Online (Sandbox Code Playgroud)
这样做,工具提示在 上按预期工作,lower但在 上根本不起作用upper。
但是,如果我删除.add_selection(brush)from lower,则工具提示也会起作用upper(未更改),但这当然违背了示例的目的。我还可以upper通过将其标记为交互式来使工具提示起作用,但同样,这破坏了示例的优点。更改upperto的定义upper = base.encode(tooltip='price:Q')没有任何作用。
我将如何定义工具提示目标,使工具提示同时显示在
upper和 上lower?
python ×5
altair ×2
ggplot2 ×2
javascript ×2
r ×2
charts ×1
deck.gl ×1
echarts ×1
for-loop ×1
loops ×1
matplotlib ×1
pandas ×1
plotly ×1
time-series ×1
vega-lite ×1