考虑使用基础插值的D3JS图:
在D3JS v3中,我可以在区域上使用bundle interpolation(.interpolate("bundle").tension(0))来实现这种类型的渲染:
请注意图表的每个部分如何与其邻居完美匹配.这就是我需要的.
对于D3JS v4和v5,束插值的语法现在是:.curve(d3.curveBundle).但是,它现在"打算与d3.line合作,而不是d3.area."
我最近从v3升级到v5,所以我正在尝试创建一个自定义捆绑曲线,它也可以用于区域,以保持我喜欢的插值类型v3.
我很亲密.这是我到目前为止:
///////////////////// Custom curves.
/** Bundle-ish.
* Trying to adapt curveBundle for use with areas…
*/
function myBundle(context, beta) {
this._basis = new d3.curveBasis(context);
this._beta = beta;
this._context = context; // temporary. shouldn't be needed for bundle.
}
myBundle.prototype = {
areaStart: function() {
this._line = 0;
},
areaEnd: function() {
this._line = NaN;
},
lineStart: function() {
this._x = [];
this._y …Run Code Online (Sandbox Code Playgroud)我一直在寻找任何一个示例代码,用于在弯曲的路径上绘制UILabel(或只是一个NSString或某个东西),但空手而归.
有没有人知道是否可以在弯曲的路径上绘制文字,如圆圈或其他东西,而不是为每一个字母使用单独的图形片段?
如果您使用像Gimp或Photoshop这样的图形编辑程序,您将理解我的意思.要编辑这些程序的曲线(可能是贝塞尔曲线),我们可以单击曲线,拖动鼠标并相应地更改曲线.我怀疑这个机制背后的所有东西都与向量有关,但我找不到任何提及如何做到的文件.有人能告诉我怎么做吗?非常感谢你.
[编辑]我的意思是选择曲线本身来改变(编辑)它(点击曲线,然后拖动曲线进行编辑).通常,我们选择控制点来改变曲线.我知道要改变曲线,我需要编辑控制点,但是如何将曲线上的变化解释为对控制点的变化?
我正在撕扯我的头发试图弄清楚什么似乎是一个非常容易的问题.我知道很多这些东西都被切向讨论过,所以如果这是在很好的覆盖地面上道歉,但我找不到任何具体的解决方案(相信我,我看了).
基本上我想沿预定义的弯曲路径拖动一个对象/精灵(不仅仅是移动它,而是DRAG IT).想想iPhone的"滑动解锁"的东西,但不要只是从左到右拖动滑块,使路径成弧形或波浪线.
我的基本思路是:
这些都不是微不足道的(至少看起来是这样).例如:
我这太难了吗?它似乎并不复杂.我不需要一个完整的解决方案,只需要一种新的思考方式并朝着正确的方向前进.任何帮助将非常感激.
我的问题涉及为R中的出版物制作图表.我使用了如下的绘图函数:
plot(x=data$SL, y=data$BD, xlab = "SL (mm)", ylab = "BD (mm)", pch=data$pch)
Run Code Online (Sandbox Code Playgroud)
SL范围从51.7到73.7,BD从13.5到20.4.不幸的是我还不允许发布图片.
但是,想要摆脱我用"轴= F"的盒子.现在的问题是缺乏对轴功能的控制.我用了:
axis(side=1, lwd=3, xpd=TRUE, at=c(min(data$SL):max(data$SL)))
axis(side=2, lwd=3, xpd=TRUE, at=c(min(data$BD):max(data$BD)))
Run Code Online (Sandbox Code Playgroud)
问题是我无法设法让y轴和x轴在与框中的图中相同的点上聚集在一起.如何让x轴和y轴相互接触?
我有参数三维曲线的数据:
t x y z
0.000 3.734 2.518 -0.134
0.507 2.604 9.059 0.919
0.861 1.532 11.584 -0.248
1.314 1.015 1.886 -0.325
1.684 2.815 4.596 3.275
1.938 1.359 8.015 2.873
2.391 1.359 8.015 2.873
..............................
Run Code Online (Sandbox Code Playgroud)
我发现scatterplot3d和PLOT3D格式真的很酷.但我需要一条平滑的三维曲线.
我如何在R中绘制它?
我想用频率数据拟合离散广义β分布(DGBD).
数据如下所示:
freq = c(1116, 2067, 137 , 124, 643, 2042, 55 ,47186, 7504, 1488, 211, 1608,
3517 , 7 , 896 , 378, 17 ,3098, 164977 , 601 , 196, 637, 149 , 44,2 , 1801, 882 , 636,5184, 1851, 776 , 343 , 851, 33 ,4011, 209, 715 ,
937 , 20, 6922, 2028 , 23, 3045 , 16 , 334, 31 , 2)
Rank = rank(-freq, ties.method = c("first") )
p = freq/sum(freq)
Run Code Online (Sandbox Code Playgroud)
log.f …Run Code Online (Sandbox Code Playgroud) 我有一个函数,在分子中有一个向量,在分母中有向量的总和.因此,每个组件是向量的一个组件除以一个取决于组件总和的函数.我想绘制一条曲线,表示第一个组件中的功能,固定其他组件.为什么这段代码不起作用?
y <- vector(length=2)
y0 <- c(1,2)
f <- function(y) y/(1+sum(y))
g <- function(x) f(c(x,y0[2]))[1]
curve(g, 0, 2)
Run Code Online (Sandbox Code Playgroud)
f和g都在数值处按预期进行评估,但曲线函数给出了误差:
Error in curve(g, 0, 2) :
'expr' did not evaluate to an object of length 'n'
Run Code Online (Sandbox Code Playgroud)
我试过没有成功的矢量化g.感谢任何帮助.
我有一个熊猫系列,
这是图表:
我想填充曲线下的区域。问题是调用
plt.fill(y)
Run Code Online (Sandbox Code Playgroud)
输出:
正如在其他答案中看到的,这是因为我们需要向函数发送一个多边形,所以我们必须添加一个 (0,0) 点。(还有一个(lastPoint,0),但在这种情况下它是不必要的)。
然而,建议的解决方案是编写以下代码:
plt.fill([0]+[*range(0,len(y))], [0]+pd.Series.tolist(y))
Run Code Online (Sandbox Code Playgroud)
我拒绝相信这是最好的解决方案。
代码很糟糕,根本不容易阅读,而且我正在丢失信息(x 轴上没有日期):
此外,如果我同时调用绘图和填充(以使红线位于顶部),则会发生错误:
/usr/local/anaconda3/lib/python3.7/site-packages/matplotlib/dates.py in refresh(self)
1446 def refresh(self):
1447 'Refresh internal information based on current limits.'
-> 1448 dmin, dmax = self.viewlim_to_dt()
1449 self._locator = self.get_locator(dmin, dmax)
1450
/usr/local/anaconda3/lib/python3.7/site-packages/matplotlib/dates.py in viewlim_to_dt(self)
1197 'often happens if you pass a non-datetime '
1198 'value to an axis that has datetime units'
-> 1199 .format(vmin))
1200 return num2date(vmin, self.tz), num2date(vmax, self.tz)
1201
ValueError: view limit minimum -36868.15 is …Run Code Online (Sandbox Code Playgroud)