Matplotlib标记文本根据字符数改变大小我该如何找出原因

时间:2016-05-10 22:10:21

标签: python-3.x matplotlib

标记字体似乎具有依赖于长度的大小调整算法。我想自己研究一下,但不知道从哪里开始?代码行在下面,我发送大约12个符号,字体大小改变。我如何解决这个问题并找到它的根本原因呢?

plt.plot(x,y,lw=2.5,color='g',linestyle='solid',marker=r"$\mathsf{%s}$" % symbol, markersize=30,
     markeredgewidth=1, markeredgecolor='k' , markerfacecolor= 'None')

这里是向它发送12个不同符号的输出,即AAPL,AIG,C

enter image description here

2 个答案:

答案 0 :(得分:1)

如果您使用字符数改变public class PocketSphinxActivity extends Activity implements RecognitionListener { private static final String KWS_SEARCH = "wakeup"; /* Keyword we are looking for to activate menu */ private static final String KEYPHRASE = "open voice command"; //adjust this keyphrase! private SpeechRecognizer recognizer; private HashMap<String, Integer> captions; ListView lv; TextView tv; EditText a; Button b; Button c; Boolean isDone = false; @Override public void onCreate(Bundle state) { super.onCreate(state); // Prepare the data for UI captions = new HashMap<String, Integer>(); captions.put(KWS_SEARCH, R.string.kws_caption); setContentView(R.layout.main); ((TextView) findViewById(R.id.caption_text)) .setText("Preparing the recognizer"); lv = (ListView) findViewById(R.id.lvVoiceReturn); tv = (TextView) findViewById(R.id.result_text); a = (EditText) findViewById(R.id.TFusername); b = (Button) findViewById(R.id.bVoice); c = (Button)findViewById(R.id.Blogin); // Recognizer initialization is a time-consuming and it involves IO, // so we execute it in async task new AsyncTask<Void, Void, Exception>() { @Override protected Exception doInBackground(Void... params) { try { Assets assets = new Assets(PocketSphinxActivity.this); File assetDir = assets.syncAssets(); setupRecognizer(assetDir); } catch (IOException e) { return e; } return null; } @Override protected void onPostExecute(Exception result) { if (result != null) { ((TextView) findViewById(R.id.caption_text)) .setText("Failed to init recognizer " + result); } else { switchSearch(KWS_SEARCH); } } }.execute(); //line added...///////////////////////// a.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.toString().trim().equalsIgnoreCase("open voice command")) { // //Do your stuff here OR button.performClick() // //DELAY Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { if (!isDone) { b.performClick(); isDone = true; } } }, 500); } } @Override public void afterTextChanged(Editable s) { } }); //////////////////////////////////////// } @Override public void onDestroy() { super.onDestroy(); recognizer.cancel(); recognizer.shutdown(); } /** * In partial result we get quick updates about current hypothesis. In * keyword spotting mode we can react here, in other modes we need to wait * for final result in onResult. */ @Override public void onPartialResult(Hypothesis hypothesis) { if (hypothesis == null) return; String text = hypothesis.getHypstr(); //((TextView) findViewById(R.id.result_text)).setText(text); ((EditText) findViewById(R.id.TFusername)).setText(text); } /** * This callback is called when we stop the recognizer. */ @Override public void onResult(Hypothesis hypothesis) { //((TextView) findViewById(R.id.result_text)).setText(""); ((EditText) findViewById(R.id.TFusername)).setText(""); if (hypothesis != null) { String text = hypothesis.getHypstr(); makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show(); //a.setText((String) tv.getText()); //tv = TextView.getText().toString(); } } @Override public void onBeginningOfSpeech() { } /** * We stop recognizer here to get a final result */ @Override public void onEndOfSpeech() { if (!recognizer.getSearchName().equals(KWS_SEARCH)) switchSearch(KWS_SEARCH); } private void switchSearch(String searchName) { recognizer.stop(); // If we are not spotting, start listening with timeout (10000 ms or 10 seconds). if (searchName.equals(KWS_SEARCH)) recognizer.startListening(searchName); else recognizer.startListening(searchName, 10000); String caption = getResources().getString(captions.get(searchName)); ((TextView) findViewById(R.id.caption_text)).setText(caption); } private void setupRecognizer(File assetsDir) throws IOException { // The recognizer can be configured to perform multiple searches // of different kind and switch between them recognizer = defaultSetup() .setAcousticModel(new File(assetsDir, "en-us-ptm")) .setDictionary(new File(assetsDir, "cmudict-en-us.dict")) // To disable logging of raw audio comment out this call (takes a lot of space on the device) .setRawLogDir(assetsDir) // Threshold to tune for keyphrase to balance between false alarms and misses .setKeywordThreshold(1e-45f) // Use context-independent phonetic search, context-dependent is too slow for mobile .setBoolean("-allphone_ci", true) .getRecognizer(); recognizer.addListener(this); /** In your application you might not need to add all those searches. * They are added here for demonstration. You can leave just one. */ // Create keyword-activation search. recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE); } @Override public void onError(Exception error) { ((TextView) findViewById(R.id.caption_text)).setText(error.getMessage()); } @Override public void onTimeout() { switchSearch(KWS_SEARCH); } //Assign button clicks to go to a new activity: public void onButtonClick_1(View v){ if (v.getId() == R.id.bVoice){ String str_1 = a.getText().toString(); //Go to the relevant page if any part of the phrase or word entered in the 'EditText' field contains 'command' which is not case sensitive if (str_1.toLowerCase().contains("command")) { Intent userintent = new Intent(PocketSphinxActivity.this, Gvoice.class); startActivity(userintent); } else { Toast.makeText(getApplicationContext(), "Incorrect Information", Toast.LENGTH_SHORT).show(); } } } //Added this to clear the 'open voice command' text when pressing back from a activity window //This at the moment seems to only work when typing the command, If I use speech to text to say'open voice command @Override public void onResume(){ super.onResume(); isDone = false; a.setText(""); } } ,则字体大小相同:

b

enter image description here

我猜宽度是常数,如果指定为常量或未指定(必须是常量默认值)并且字体大小调整为适合。

现在,如何解决这个问题......我不断抛出一些东西来制作一个最小的完整例子,只是看看改变了什么并想到了它。

答案 1 :(得分:1)

所以我最终通过思考我真正想要的东西找到了对我的问题的可能解释。我找到了答案

&#34;这可能是一种有点混乱的定义大小的方法,但您基本上是指定标记的区域。这意味着,要使标记的宽度(或高度)加倍,需要将s增加4倍。[因为A = WH =&gt; (2W)(2H)= 4A]&#34;

这里。

enter link description here