Faits :
A.
Z._ AG, dont le siège est à Berne, se consacre aux services dans le domaine des assurances et dans d'autres domaines connexes. Dès le 27 juin 2011, elle a engagé X._ en qualité de responsable du service à la clientèle de son agence de Lausanne. Plusieurs collaborateurs lui étaient subordonnés. Elle avait pour chef V._; celui-ci avait lui-même pour chef W._.
B.
V._, X._ et les autres cadres subordonnés à W._ étaient soumis à un fort stress. W._ n'acceptait aucun avis contraire au sien et il répondait à ses subordonnés en se montrant arrogant et irrespectueux. Il a notamment réagi de cette manière lors d'une séance de cadres à la fin de l'année 2013. Dans le contexte d'une charge de travail que ses subordonnés tenaient déjà pour excessive, il annonçait des tâches supplémentaires. Il a imposé le silence à X._.
Le 23 octobre 2013, W._ était intervenu auprès de V._ pour relever que X._ n'accomplissait pas le nombre d'heures de travail dû à l'employeuse et que cette situation était inadmissible. Il fut formellement rappelé à X._ que les heures dues devaient être accomplies et que la gestion de son temps de travail devait être un exemple pour le personnel subalterne.
Le 10 octobre 2014, W._ est derechef intervenu auprès de V._ pour critiquer l'insuffisance des heures de travail accomplies à l'agence de Lausanne. V._ a démissionné de son poste le 13 du même mois, à ses dires en raison de l'attitude irrespectueuse de W._. Le 30, lors d'un entretien avec X._, en présence d'une collaboratrice du service des ressources humaines, W._ lui a reproché une gestion excessivement laxiste de l'équipe placée sous sa responsabilité.
Le 3 novembre 2014, W._ a pris part à une séance hebdomadaire à laquelle il n'était habituellement pas présent. Il a averti les collaborateurs qu'il s'apprêtait à « reprendre les choses en main » et qu'il n'était « pas d'accord » avec une mesure d'appui au personnel que X._ avait proposée en 2012, qu'il avait alors approuvée, consistant dans le conseil apporté dans les bureaux par une professeure de yoga.
C.
Dès le lendemain 4 novembre et jusqu'au 12 décembre 2014, X._ a subi une incapacité de travail totale pour cause de maladie. Elle est retournée à son poste le lundi 15 décembre. Son accès à l'infrastructure informatique était alors bloqué. Produisant un certificat médical, elle a annoncé que l'incapacité de travail se prolongerait au taux de 50 % jusqu'au 9 janvier 2015. W._ lui a alors signifié son licenciement ordinaire avec libération de l'obligation de travailler. Elle a rassemblé ses collaborateurs dans un bureau afin de prendre congé. W._ a abruptement interrompu leur réunion, renvoyant les collaborateurs à leurs postes, et il a surveillé X._ pendant qu'elle récupérait ses affaires personnelles.
Le 18 mai 2015, par l'entremise de son conseil, X._ a signifié son opposition au licenciement; elle le tenait pour abusif.
En raison d'une nouvelle période d'incapacité de travail, suivie d'une grossesse et d'un accouchement, les rapports contractuels ont pris fin le 30 juin 2016.
D.
Le 21 octobre 2016, X._ a ouvert action contre Z._ AG devant le Tribunal civil de l'arrondissement de Lausanne. La défenderesse devait être condamnée à payer 42'840 fr. à titre d'indemnité pour licenciement abusif, avec intérêts au taux de 5% par an dès le 19 février 2015. La défenderesse devait être aussi condamnée à remettre un certificat de travail final au libellé correspondant à un certificat intermédiaire précédemment remis.
La défenderesse a conclu au rejet de l'action.
Le tribunal s'est prononcé le 14 septembre 2018. Accueillant partiellement l'action, il a condamné la défenderesse à payer 21'420 fr. avec intérêts selon les conclusions de la demande. Il a également condamné la défenderesse à remettre un certificat de travail dont le jugement fixe le libellé.
La Cour d'appel civile du Tribunal cantonal a statué le 6 décembre 2019 sur l'appel de la défenderesse. Elle a partiellement accueilli cet appel. La défenderesse est désormais condamnée à payer 7'140 fr. avec intérêts au taux de 5% par an dès le 30 juin 2016. Le certificat de travail final établi par la défenderesse le 30 septembre 2016 est par ailleurs validé, à ceci près que la Cour y ordonne la suppression d'une phrase.
E.
Agissant par la voie du recours en matière civile, la demanderesse saisit le Tribunal fédéral de conclusions qui tendent pour l'essentiel à la confirmation du jugement de première instance. L'indemnité de 21'420 fr. doit porter intérêts dès le 30 juin 2016 seulement. Le certificat de travail doit être rédigé selon ce jugement, mais au passé composé plutôt qu'au présent.
La défenderesse conclut au rejet du recours.
Considérant en droit :
1.
Les conditions de recevabilité du recours en matière civile sont en principe satisfaites, notamment à raison de la valeur litigieuse.
Le recours est recevable pour violation du droit fédéral (art. 95 let. a LTF). Le Tribunal fédéral doit conduire son raisonnement juridique sur la base des faits constatés dans la décision attaquée (art. 105 al. 1 LTF); il peut toutefois compléter ou rectifier même d'office les constatations de fait qui se révèlent manifestement inexactes, c'est-à-dire arbitraires aux termes de l'art. 9 Cst. (art. 105 al. 2 LTF; ATF 141 IV 249 consid. 1.3.1 p. 253; 140 III 264 consid. 2.3 p. 266; 137 I 58 consid. 4.1.2 p. 62). La partie recourante est autorisée à attaquer des constatations de fait ainsi irrégulières si la correction du vice est susceptible d'influer sur le sort de la cause (art. 97 al. 1 LTF). Il lui incombe alors d'indiquer de façon précise en quoi les constatations critiquées sont contraires au droit ou entachées d'une erreur indiscutable; les critiques dites appellatoires, tendant simplement à une nouvelle appréciation des preuves, sont irrecevables (ATF 133 II 249 consid. 1.4.3 p. 254; voir aussi ATF 141 IV 249 consid. 1.3.1 p. 253; 140 III 264 consid. 2.3 p. 266; 137 I 58 consid. 4.1.2 p. 62).
2.
Il est constant que les parties se sont liées par un contrat de travail de durée indéterminée, librement résiliable par chacune d'elles conformément à l'art. 335 al. 1 CO, moyennant le respect du délai et du terme de congé convenus ou légaux.
La résiliation ordinaire du contrat de travail est abusive lorsqu'elle intervient dans l'une des situations énumérées à l'art. 336 al. 1 CO, lesquelles se rapportent aux motifs de la partie qui résilie. Cette disposition restreint, pour chaque cocontractant, le droit de mettre unilatéralement fin au contrat (ATF 136 III 513 consid. 2.3 p. 514/515; 132 III 115 consid. 2.4 p. 118; 131 III 535 consid. 4.2 p. 539 in medio). Lorsque l'une des parties a résilié abusivement, l'art. 336a al. 1 et 2 CO autorise l'autre partie à réclamer une indemnité dont le juge fixe librement le montant en tenant compte de toutes les circonstances; cette indemnité ne peut toutefois pas excéder l'équivalent de six mois de salaire.
L'énumération de l'art. 336 al. 1 CO n'est pas exhaustive et un abus du droit de résiliation peut se révéler aussi dans d'autres situations qui apparaissent comparables, par leur gravité, aux hypothèses expressément visées (ATF 136 III 513 ibidem; 132 III 115 consid. 2 p. 116; 131 III 535 consid. 4 p. 537). Ainsi, lorsque le caractère difficile d'un travailleur engendre une situation conflictuelle dans l'entreprise, préjudiciable à l'accomplissement du travail, l'employeur ne peut licencier ce travailleur qu'après avoir introduit sans succès les autres mesures que l'on pouvait raisonnablement attendre de lui en vue d'améliorer la situation, telles que des modifications de son organisation ou des instructions adressées aux autres travailleurs. L'art. 328 al. 1 CO impose à l'employeur de respecter et de protéger la personnalité du travailleur; si l'employeur omet ces mesures ou s'il se contente de démarches insuffisantes et qu'il procède néanmoins au licenciement, il viole son obligation de protéger la personnalité du travailleur et le licenciement est alors abusif. En raison de la finalité du droit de résiliation, d'une part, et de la disproportion des intérêts en présence, d'autre part, le licenciement peut également être tenu pour abusif lorsqu'il répond à un motif de simple convenance personnelle de l'employeur (ATF 132 III 115 consid. 2 p. 116; ATF 131 III 535 consid. 4 p. 537; 125 III 70 consid. 2 p. 72).
L'abus n'est pas obligatoirement inhérent au motif de la résiliation; il peut également surgir dans ses modalités. La partie qui veut mettre fin au contrat, même pour un motif légitime, doit exercer son droit avec des égards et s'abstenir de tout comportement biaisé ou trompeur. Une violation manifeste du devoir imposé par l'art. 328 al. 1 CO, en relation avec le licenciement, peut caractériser l'abus. Par contre, un comportement de l'employeur simplement discourtois ou indélicat est insuffisant car il ne ressortit pas à l'ordre juridique de sanctionner ces attitudes (mêmes arrêts).
Le motif de la résiliation relève du fait et il incombe en principe au travailleur d'apporter la preuve d'un motif abusif; le juge peut cependant présumer un abus lorsque le motif avancé par l'employeur semble mensonger et que celui-ci ne parvient pas à en apporter la confirmation (ATF 130 III 699 consid. 4.1 p. 702/703).
3.
La demanderesse a réclamé une indemnité de 42'840 fr. correspondant à six mois de salaire. Le Tribunal civil a jugé que le congé était abusif dans son motif et aussi dans ses modalités; il a alloué une indemnité de 21'420 fr. correspondant à trois mois. La Cour d'appel juge que le congé n'était pas abusif dans son motif et elle réforme le jugement sur ce point; elle confirme en revanche que le congé était abusif dans ses modalités et elle réduit l'indemnité à 7'140 fr. correspondant à un mois.
Parce que seule la demanderesse attaque le jugement d'appel, il est définitivement établi que le congé était abusif dans ses modalités. En l'état de la contestation, celle-ci a pour seul objet, outre le libellé du certificat de travail, d'élucider si le congé était abusif aussi dans son motif, et si l'indemnité doit être en conséquence évaluée à plus d'un mois de salaire.
4.
Selon la thèse de la demanderesse, un conflit personnel s'est élevé entre elle et W._ dès la séance de cadres de la fin de l'année 2013, et ce conflit se trouve à l'origine du congé litigieux. Elle a sans succès réclamé l'intervention du service des ressources humaines, lequel s'est borné à assister, par l'une de ses collaboratrices, à l'entretien du 30 octobre 2014. Le respect et la protection de sa personnalité nécessitaient prétendument une intervention plus profonde qui a été omise; la défenderesse l'a par conséquent licenciée abusivement.
A l'issue d'une discussion détaillée des documents produits et des témoignages recueillis, la Cour d'appel parvient à la conclusion que W._ agissait certes de manière blessante et irrespectueuse, mais que l'ensemble des cadres qui lui étaient rattachés subissaient la même attitude. Il n'existait donc pas de conflit particulier entre lui et la demanderesse. Celle-ci tient ce jugement pour arbitraire. Elle développe une nouvelle discussion et elle propose sa propre analyse des éléments examinés par les juges d'appel. Le Tribunal fédéral n'y discerne guère sur quels points elle leur reproche réellement, sinon par de simples protestations ou dénégations, d'avoir commis une erreur certaine ou d'être parvenus à un résultat absolument insoutenable. L'argumentation ainsi présentée tend seulement à substituer une appréciation différente de celle de l'autorité précédente; elle est par conséquent irrecevable au regard de la jurisprudence ci-mentionnée relative à l'art. 97 al. 1 LTF.
La demanderesse relève avec pertinence que la Cour d'appel ne constate pas explicitement le motif du congé avancé par la défenderesse et jugé conforme à la vérité. Il est toutefois constant que lors de l'entretien du 30 octobre 2014, W._ a reproché à la demanderesse une gestion excessivement laxiste de l'équipe placée sous sa responsabilité. Le 10 du même mois, il avait dénoncé un manque dans les heures de travail accomplies. Il est aussi établi que pendant la période d'absence de la demanderesse qui a précédé le congé, W._ a découvert que celle-ci avait accumulé un important retard dans le classement de documents confidentiels; cela n'est pas non plus contesté de manière recevable. De toute évidence, W._ était donc insatisfait du travail de la demanderesse. Or, il n'est pas abusif de licencier un travailleur au motif que ses prestations ne répondent pas aux exigences de ses supérieurs. La demanderesse ne peut pas opposer utilement qu'elle était appréciée de ses collaborateurs car ce n'est pas à ceux-ci qu'il appartenait de fixer les exigences à satisfaire.
5.
En application de l'art. 330a al. 1 CO, la défenderesse a établi un certificat de travail final le 30 septembre 2016. Dans ce texte, la Cour d'appel ordonne la suppression d'une phrase qu'elle juge dépourvue d'objectivité; pour le surplus, elle retient que la demanderesse n'a pas apporté la preuve de faits justifiant l'exigence d'un document au libellé différent, ni la preuve de prestations d'une qualité supérieure à la moyenne. La demanderesse reprend et poursuit la discussion devant le Tribunal fédéral. A ce sujet également, elle n'avance aucun argument apte à révéler un vice certain dans l'appréciation des preuves. Elle ne tente pas non plus de démontrer une application éventuellement incorrecte des principes juridiques auxquels la Cour d'appel devait se référer.
6.
Le recours se révèle privé de fondement, dans la mesure où les griefs présentés sont recevables. A titre de partie qui succombe, son auteure doit acquitter l'émolument à percevoir par le Tribunal fédéral et les dépens auxquels l'autre partie peut prétendre.
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté, dans la mesure où il est recevable.
2.
La demanderesse acquittera un émolument judiciaire de 2'000 francs.
3.
La demanderesse versera une indemnité de 2'500 fr. à la défenderesse, à titre de dépens.
4.
Le présent arrêt est communiqué aux parties et au Tribunal cantonal du canton de Vaud.
Lausanne, le 1er juillet 2020
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La présidente : Kiss
Le greffier : Thélin