我正在尝试在JFreeChart中生成一个包含重叠烛台图和时间序列图的单个图表.(有点像这样)
烛台趋势叠加http://www.prices-oil.org/wp-content/uploads/2009/04/oil1stapril.jpg
我已经尝试创建烛台图表,然后添加一个额外的XY系列和它的渲染器,但这会导致运行时错误
org.jfree.data.xy.XYSeriesCollection cannot be cast to org.jfree.data.xy.OHLCDataset
我的代码片段如下
private XYPlot plot;
private XYSeriesCollection dataTrend;
private XYItemRenderer renderer;
public OhlcChart(BarCollection bars)
{
JFreeChart jfreechart = ChartFactory.createCandlestickChart("FX Trader Prototype", "Time", "Value", getDataset(bars), true);
plot = (XYPlot)jfreechart.getPlot();
plot.setDomainPannable(true);
NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
numberAxis.setAutoRangeIncludesZero(false);
numberAxis.setAutoRangeStickyZero(false);
numberAxis.setUpperMargin(0.0D);
numberAxis.setLowerMargin(0.0D);
DateAxis dateAxis = (DateAxis) plot.getDomainAxis();
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM HH:mm.ss");
dateAxis.setDateFormatOverride(formatter);
this.renderer = plot.getRenderer();
Stroke myStroke = new BasicStroke((float) 1.0);
this.renderer = new XYLineAndShapeRenderer();
this.renderer.setSeriesPaint(0, Color.blue);
this.renderer.setSeriesStroke(0, myStroke);
}
public OhlcChart update(Timeseries<Double> ts) …
Run Code Online (Sandbox Code Playgroud) 有人能告诉我在 pytest 中处理资源文件的正确方法是什么吗?
我习惯在包(src)目录下创建一个资源目录,并在测试分支下创建另一个目录
root---package---resource_dir
| |-file1.py
| |-file2.py
|
|-test-- resource_dir-
| |-config1.csv
| |-config2.csv
|-test1.py
|-test2.py
Run Code Online (Sandbox Code Playgroud)
如果我想从测试中访问这些文件,Pythonic 的方式是什么?到目前为止,我一直在使用相对文件路径,但该解决方案并不是很好。有没有类似于Java资源解决方案的解决方案?
在我的JFreeChart时间序列图中,我发现图形线条变薄以准确地看到颜色.另一篇文章[ jfreechart - 更改图例中的颜色样本 ]建议覆盖渲染器方法,如下所示:
renderer = new XYLineAndShapeRenderer()
{
private static final long serialVersionUID = 1L;
public Shape lookupLegendShape(int series)
{
return new Rectangle(15, 15);
}
};
Run Code Online (Sandbox Code Playgroud)
这种方法很好,直到你做我做的事情
renderer.setSeriesShapesVisible(i, false);
Run Code Online (Sandbox Code Playgroud)
一旦我这样做,传说就会恢复到一条线.这有什么办法吗?
我采用的解决方案接近于TrashGod I 建议的覆盖getLegendItem()方法,将图例形状强制转换为所需的框.
renderer = new XYLineAndShapeRenderer()
{
private static final long serialVersionUID = 1L;
public LegendItem getLegendItem(int datasetIndex, int series)
{
LegendItem legend = super.getLegendItem(datasetIndex, series);
return new LegendItem(legend.getLabel(), legend.getDescription(), legend.getToolTipText(), legend.getURLText(), Plot.DEFAULT_LEGEND_ITEM_BOX, legend.getFillPaint());
}
};
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个python SNMP代理,我可以将其嵌入到我的python应用程序中,以便OpenNMS可以远程监视应用程序.OpenNMS希望代理实现HOST-RESOURCES-MIB
查询两个字段 hrSWRunName
和hrSWRunStatus
.
我把一个pysnmp示例作为我的代码的基础,并在我认为必要时编辑它.生成的代码如下所示:
import logging
from pysnmp import debug
from pysnmp.carrier.asyncore.dgram import udp
from pysnmp.entity import engine, config
from pysnmp.entity.rfc3413 import cmdrsp, context
from pysnmp.proto.api import v2c
from pysnmp.smi import builder, instrum, exval
# debug.setLogger(debug.Debug('all'))
formatting = '[%(asctime)s-%(levelname)s]-(%(module)s) %(message)s'
logging.basicConfig(level=logging.DEBUG, format=formatting, )
logging.info("Starting....")
# Create SNMP engine
snmpEngine = engine.SnmpEngine()
# Transport setup
# UDP over IPv4
config.addTransport(
snmpEngine,
udp.domainName,
udp.UdpTransport().openServerMode(('localhost', 12345))
)
# SNMPv2c setup
# SecurityName <-> CommunityName mapping.
config.addV1System(snmpEngine, 'my-area', 'public') …
Run Code Online (Sandbox Code Playgroud) 可能令我羞愧的是,我刚刚开始在我的 python 代码中包含类型检查。大多数类型检查都是直接进行的,但我对处理可以返回 None 的函数的 pythonic 方式有点迷失
例如
threads = os.cpu_count() * 1.2
Run Code Online (Sandbox Code Playgroud)
这会引发 MyPy 错误
Mypy: Unsupported operand types for * ("None" and "float")
Run Code Online (Sandbox Code Playgroud)
所以为了摆脱这个我将代码更改为
default = (os.cpu_count() if os.cpu_count() is not None else 1.0) * 1.2
Run Code Online (Sandbox Code Playgroud)
但这给出了完全相同的错误。
处理这个问题的最佳方法是什么?